Applicative 处于 Functor 和 Monad 之间.其定义如下:
1 | class Functor f => Applicative f where |
一个新的函数
1 | (<*>) :: Applicative f => f (a -> b) -> f a -> f b |
一个不太恰当的比喻:
Functor是一个已知的函数应用在一个盒子里的值上(这个盒子可能是空的,即没有值)Applicative是一个盒子里的函数应用在一个盒子里的值上(这两个盒子可能都没有值,即没有函数或者没有值)
(*>) 和 (<*) 运算符也是比较有用的的,在计算完两边的表达式后,返回右值/左值,可以结合 condition check 使用:
1 | decrease :: Int -> Maybe Int |
traverse是 Applicative 版本的mapM
Alternative Applicative
1 | <|> :: f a -> f a -> f a |