Haskell 如何使用monadtrans?
我有以下类型:Haskell 如何使用monadtrans?,haskell,Haskell,我有以下类型: newtype StateT' s m a = StateT' { runStateT' :: s -> m (a,s) } 我实现了MonadTrans实例: instance MonadTrans (StateT' s) where lift ma = StateT' $ \s -> do a <- ma return (a, s) 实例MonadTrans(StateT's),其中 提升ma=StateT'$\s->do A.
newtype StateT' s m a =
StateT' { runStateT' :: s -> m (a,s) }
我实现了MonadTrans实例:
instance MonadTrans (StateT' s) where
lift ma = StateT' $ \s -> do
a <- ma
return (a, s)
实例MonadTrans(StateT's),其中
提升ma=StateT'$\s->do
A.
语句return(a,s)
将返回哪种类型?元组还是用单子包裹的元组
包裹在单子中的元组<代码>返回(a,s)::m(a,s)
这是好的,因为runStateT'::s->m(a,s)
如何使用提升功能和力来进行StateT'
type
你可能不需要这个。如果在有类型签名的地方使用lift
,它应该可以正常工作
您可以制作一个带有类型签名的lift版本,该类型签名介绍了您正在提升到StateT的
,但这不会有多大帮助,因为类型推断仍然需要推断s
liftStateT' :: Monad m => m a -> StateT' s m a
liftStateT' = lift