为什么我不能用 MonadReader 约束调用 ask
Why can't I call ask with MonadReader constraint
我正在尝试在具有 MonadReader
约束的 do
符号块中调用 ask
,但我收到有关刚性类型的错误。据我所知,ask
是为所有 MonadReader
s ?
定义的
bar :: MonadReader r m => m r
bar = do
i <- ask
return i
这个returns这个
• 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 }
您似乎从 Control.Monad.Trans.Reader
导入了 ask
,但从 Control.Monad.Reader
导入了 MonadReader
。 Control.Monad.Trans.Reader
中的 ask
函数是单态的,它只适用于 ReaderT
。只需单独导入 Control.Monad.Reader
——它会重新导出 ReaderT
,但它提供了 ask
、local
和 reader
.[=22= 的通用版本]
我正在尝试在具有 MonadReader
约束的 do
符号块中调用 ask
,但我收到有关刚性类型的错误。据我所知,ask
是为所有 MonadReader
s ?
bar :: MonadReader r m => m r
bar = do
i <- ask
return i
这个returns这个
• 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 }
您似乎从 Control.Monad.Trans.Reader
导入了 ask
,但从 Control.Monad.Reader
导入了 MonadReader
。 Control.Monad.Trans.Reader
中的 ask
函数是单态的,它只适用于 ReaderT
。只需单独导入 Control.Monad.Reader
——它会重新导出 ReaderT
,但它提供了 ask
、local
和 reader
.[=22= 的通用版本]