應用編織者

定義

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