Для Applicative
, это может быть обосновано параметризацией. Рассмотрим ...
(&*&) :: Applicative f => f a -> f b -> f (a, b)
... который является эквивалентом (<*>)
в моноидальном представлении Applicative
. Ограниченная функциями, свободная теорема для (&*&)
:
fmap g u &*& fmap h v = fmap (bimap g h) (u &*& v)
(Свободная теорема на самом деле является более общей, поскольку она позволяет отношениям, не являющимся функциями, играть роли g
и h
.)
Теорема о свободе означает, что если мы изменим значения-в-функторе u
или v
, результат (&*&)
будет зависеть только от его соответствующие значения-в-функторе изменяются таким же образом. Другими словами, что касается (&*&)
, значения в функторе не имеют никакого влияния на аппликативные эффекты, которые вы намеревались установить sh.