理解MonadTrans的“亲切”

时间:2015-04-08 03:23:03

标签: haskell

查看kind的{​​{1}}:

Monad

我认为这是因为它需要ghci>:k Monad Monad :: (* -> *) -> Constraint a,并返回m a约束。

查看Monad的* MonadTrans,我看到了:

kind

所以,我相信,第一个ghci>:i MonadTrans class MonadTrans (t :: (* -> *) -> * -> *) where lift :: Monad m => m a -> t m a -- Defined in `Control.Monad.Trans.Class' instance MonadTrans MaybeT -- Defined in `Control.Monad.Trans.Maybe' 来自(* -> *)的{​​{1}}。但是Monad

呢?

1 个答案:

答案 0 :(得分:7)

第二个* -> *也来自Monad类! monad变换器采用类型参数Monad(或至少是具有Monad类型的类型)并生成一个新类型Monad(也有Monad)的种类。

 * -> *            -- a Monad
(* -> *) -> * -> * -- Something that takes a Monad and makes a new Monad.
            * -> * -- also a Monad