我在理解State monad的类型参数以及其他mtl monad的类型参数时有些麻烦。就我的理解而言,当我编写一个State monad时,State String Int
我真正拥有的是StateT String Identity Int
。get
对于MonadState
类型类的方法,它返回m s
,在这种情况下,“ m”是什么?是Identity Monad,Identity Int吗?在这种情况下,代表状态类型的“ s”是“ m”的参数吗?
谢谢,我显然很难理解Haskell的类型系统。
好吧,这取决于您使用的实例–这就是类型类的重点!
class MonadState s m where
get :: m s
在简单的情况下State
,这就是您所在的单子目录:
instance MonadState String (State String) where
get :: State String String
...的缩写
instance MonadState String (StateT String Identity) where
get :: (StateT String Identity) String
OTOH,也可能是
instance MonadState Int (StateT Int IO) where
get :: StateT Int IO Int
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句