Таким образом определяется монада Cont:
newtype Cont r a = Cont { runCont :: (a -> r) -> r }
instance Monad (Cont r) where
return a = Cont ($ a)
m >>= k = Cont $ \c -> runCont m $ \a -> runCont (k a) c
Не могли бы вы объяснить, как и почему это работает? Что он делает?