应用编织者
定义
class Functor f => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
注意 Functor
上的 Functor
约束。pure
函数返回嵌入在 Applicative
结构中的参数。中缀函数 <*>
(发音为 apply
)与 fmap
非常相似,除了 Applicative
结构中嵌入的函数。
Applicative
的正确实例应该满足适用法则,尽管编译器不强制执行这些法则 :
pure id <*> a = a -- identity
pure (.) <*> a <*> b <*> c = a <*> (b <*> c) -- composition
pure f <*> pure a = pure (f a) -- homomorphism
a <*> pure b = pure ($ b) <*> a -- interchange