Описание тега applicative
В Haskell аппликативные функторы - это функторы, такие, что два функториальных значения могут быть объединены в одно, в то время как два значения внутри объединяются посредством функционального приложения. Аппликативный функтор имеет больше структуры, чем функтор, но меньше, чем монада.
В Haskell аппликативные функторы - это такие функторы, что два функториальных значения (типа Applicative f => f a
) могут быть объединены в одно, и два значения внутри будут объединены с помощью функционального приложения (поэтому типы "внутри" должны быть совместимы).
Определение
class (Functor f) => Applicative f where
pure :: a -> f a -- injection
(<*>) :: f (a -> b) -> f a -> f b -- combination
В pure
функция поднимает любое значение в функтор. (<*>)
превращает функториальную функцию в функцию над функториальными значениями. Аппликативный функтор должен удовлетворять некоторым законам:
pure id <*> v = v -- Identity
pure (.) <*> u <*> v <*> w = u <*> (v <*> w) -- Composition
pure f <*> pure x = pure (f x) -- Homomorphism
u <*> pure y = pure ($ y) <*> u -- Interchange
А экземпляр Functor должен удовлетворять следующему закону:
fmap f x = pure f <*> x -- Fmap