我有以下类型:
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)
我的问题是:
语句return (a, s)
将返回哪种类型?一个元组
还是用monad包裹的元组?
如何使用lift
函数并强制使用StateT'
类型?
答案 0 :(得分:3)
语句
return (a, s)
将返回哪种类型?用元组包裹的元组或元组?
一个用monad包裹的元组。自return (a, s) :: m (a, s)
runStateT' :: s -> m (a, s)
如何使用提升功能和力量来
StateT'
输入?
你可能不需要这个。如果你使用lift
那里有类型签名,它应该可以正常工作。
你可以制作一个带有类型签名的电梯版本,这个版本会引入你提升到StateT' s
的事实,但它不会有太多帮助,因为类型推断仍然需要推断{ {1}}。
s