instance Monoid m => Applicative (Const m) where
pure _ = Const mempty
Const f <*> Const v = Const (f `mappend` v)
我不明白如何定义<*>
类型检查。
左侧受Applicative 定义中f
的签名约束<*>
class Functor f => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
将名称更改为当前情况后:
(<*>) :: c (m -> b) -> c m -> c b
=> f :: m -> *
。
左侧f
是 的 [first] 参数mappend
。
从 Monoid 的定义
class Monoid a where
mempty :: a
-- ^ Identity of 'mappend'
mappend :: a -> a -> a
将名称更改为当前情况后:
mappend :: m -> m -> m
=> f :: m
。