Haskell 为什么我不能打电话问莫纳
我试图调用带有monawarder约束的do符号块中的ask,但在刚性类型方面遇到了一个错误。据我所知,ask是为所有恐惧者定义的 这将返回 似乎您已经从Control.Monad.Trans.Reader导入了ask,但从Control.Monad.Reader导入了monader。Control.Monad.Trans.Reader中的ask函数是单态函数,它只适用于ReaderT。只需单独导入Control.Monad.Reader即可重新导出ReaderT,但它提供了ask、local和Reader的通用版本。您似乎从Control.Monad.Trans.Reader导入了ask,但从Control.Monad.Reader导入了Monader。Control.Monad.Trans.Reader中的ask函数是单态函数,它只适用于ReaderT。只需单独导入Control.Monad.Reader即可重新导出ReaderT,但它提供了ask、local和Reader的通用版本。一个警告:C.M.T.R中的local允许更改环境类型,而C.M.R中的local不允许更改。一个警告:C.M.T.R中的local允许更改环境类型,而C.M.R中的local不允许更改。Haskell 为什么我不能打电话问莫纳,haskell,monad-transformers,Haskell,Monad Transformers,我试图调用带有monawarder约束的do符号块中的ask,但在刚性类型方面遇到了一个错误。据我所知,ask是为所有恐惧者定义的 这将返回 似乎您已经从Control.Monad.Trans.Reader导入了ask,但从Control.Monad.Reader导入了monader。Control.Monad.Trans.Reader中的ask函数是单态函数,它只适用于ReaderT。只需单独导入Control.Monad.Reader即可重新导出ReaderT,但它提供了ask、local和
bar :: MonadReader r m => m r
bar = do
i <- ask
return i
• Couldn't match type ‘m’ with ‘ReaderT r m0’
‘m’ is a rigid type variable bound by
the type signature for:
bar :: forall r (m :: * -> *). MonadReader r m => m r
at mem.hs:50:8
Expected type: m r
Actual type: ReaderT r m0 r
• In a stmt of a 'do' block: i <- ask
In the expression:
do { i <- ask;
return i }
In an equation for ‘bar’:
bar
= do { i <- ask;
return i }