From what I understand, this code
main = forever $ do
putStrLn "OK !"
is equivalent to this one :
main = do
putStrLn "OK !"
main
In the second case, it's a simple recursion, so far so good ... but when I look at the implementation of "forever" i can't wrap my head around :
forever a = let a' = a *> a' in a'
How does this works ? How does this make an infinite loop ?
I understand that *> discard his right argument but it doesn't help me understand how forever implement an infinite loop ...