标签: haskell monads monad-transformers state-monad type-constraints
这是变形金刚库中的StateT定义:
newtype StateT s m a = StateT { runStateT :: s -> m (a,s) }
这里m是Monad
m
Monad
那为什么在定义中没有矛盾呢?像这样:
newtype (Monad m) => StateT s m a = StateT { runStateT :: s -> m (a,s) }