Как упоминалось в Hackage for Applicative Functors, они являются сильными слабыми моноидальными функторами. Так почему же не их определение в Haskell показать это примерно так:Аппликативные функторы как моноидальные функторы
class Functor f => MonoidalApplicative f where
mult :: f a -> f b -> f (a,b)
unit :: a -> f a
starAp :: f (a -> b) -> f a -> f b
starAp h x = fmap (uncurry ($)) (mult h x)
<*>
(starAp) легко реконструируется с точки зрения умножения и это определение выглядит проще для меня. Для Exemple, здесь Может быть, пример:
instance MonoidalApplicative Maybe where
mult (Just x) (Just y) = Just (x,y)
mult _ _ = Nothing
unit x = Just x
Презентация '(<*>)' имеет тенденцию быть более удобной в повседневном программировании, хотя в некоторых аспектах «мульти» действительно более аккуратный (например, прикладные законы выглядят лучше, когда выражаются в его терминах). Этот сценарий аналогичен взаимосвязи между «(>> =)» и «join». Соответствующая запись в блоге: http://blog.ezyang.com/2012/08/applicative-functors/ – duplode
Примечание: моноидальная презентация обычно имеет 'unit :: f()'. 'pure', то можно восстановить через' pure x = fmap (const x) unit'. – duplode
См. Http://stackoverflow.com/a/27262462/414413 – Cirdec