Когда аппликативы запускают свои эффекты? - PullRequest
0 голосов
/ 14 июля 2020

Менее "Почему Стати c Стрелки обобщают Стрелки?" post , мы часто говорили о побочных эффектах Applicative перед применением функции-в-функторе к значению-в-функторе.

Также, danidiaz использовал этот факт, чтобы показать, что Arrow не эквивалентно Applicative в этом ответе под «Стрелки в точности эквивалентны аппликативным функторам?» вопрос .

Как оформляется это свойство?

1 Ответ

3 голосов
/ 15 июля 2020

Для 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.

...