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