cpsGetChar :: ContT r IO Char cpsGetChar = do c <- liftIO getChar return c cpsProcessChar :: Char -> ContT r IO () cpsProcessChar c = do liftIO $ putChar c return () -- New version of cpsProcessChar cpsProcessChar fk c = do liftIO $ putChar c callCC $ \ k -> forever (cpsGetChar >>= cpsProcessChar k)