
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 : http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Monad.html... forever http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Monad.html... a http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Monad.html... = let a' http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Monad.html... = a http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Monad.html... *> http://hackage.haskell.org/package/base-4.11.1.0/docs/src/GHC.Base.html#%2A%... a' http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Monad.html... in a' http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Monad.html... 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 ...