Haskell は簡単に無限ループを作れる。 もちろん他の言語でもwhile(1)とすれば簡単に作れるけど、じゃあその無限ループから脱出するbreakに相当する機能をHaskellでも作れるだろうか。 (`・ω・´) 実際に作ってみた。 import Control.Monad.Cont main :: IO () main = do putStrLn "Start" withBreak $ \break -> forM_ [1..] $ \i -> do liftIO . putStrLn $ "Loop: " ++ show i when (i == 5) $ break () putStrLn "End" where withBreak = flip runContT pure . callCC