当我正在阅读“All About Monads”时,我碰到了这样的类类型定义:
class Monad m => MonadReader r (m :: * -> *) | m -> r where
...
class Monad m => MonadState s (m :: * -> *) | m -> s where
...
我对竖条记法感到困惑!这是一个“OR”,是一个约束吗?那么m->s
怎么样呢?
我知道什么是类型类,我知道什么是类型构造函数和类型变量,我也得到了什么是种类,我只是无法理解这一点!
另外,当我使用ghci时,在输入:k MonadState
:k MonadReader
后,他们都给了我* -> (* -> *) -> GHC.Prim.Constraint
,这真是太奇怪了!
有人可以对此有所了解吗?