Imaginantia

思ったことを書きます

Entries from 2018-02-01 to 1 month

label-like continuation

label :: m (m a) がほしい do cont ← label print 1 cont で無限に 1 が出力されてほしい import Control.Monad.Cont import Control.Monad.State main :: IO () main = evalStateT (runContT k return) 0 label :: Monad m ⇒ ContT r m (ContT r m a) labe…

M と MM

双方向に自然変換を取れる fmap return :: Monad m ⇒ m a → m (m a) join :: Monad m ⇒ m (m a) → m a 「自然に潰れたモナド」がほしい、っていう需要はいっぱいあるよね