import Control.Monad.Cont import Control.Monad.Reader import Control.Monad.Trans(lift) neverReturns :: IO () neverReturns = (`runContT` return) $ do callCC $ \gotoAfter -> do lift $ print "before" gotoAfter () lift $ print "never gets here, haha!" lift $ print "gets here though!" main :: IO () main = do neverReturns print "Even at the end of the program, never gets here is never called"