應用編織者
定義
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