Описание тега 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