Что означает «слабый» в «слабом моноидальном функторе»? - PullRequest
0 голосов
/ 07 сентября 2018

Я знаю, что класс Applicative описан в теории категорий как "слабый моноидальный функтор", но я никогда раньше не слышал термин "слабый", и страница nlab на слабом функторе куча вещей, которые я вообще не узнаю, а именно: бикатегории и вещи, которые я не знал, о которых мы заботились в Haskell. Если речь идет о бикатегориях, может ли кто-нибудь дать мне представление о том, что это означает? Иначе, что «слабый» делает в этом имени?

1 Ответ

0 голосов
/ 07 сентября 2018

Перейдем к моноидальному виду Applicative:

unit ::     ()     -> f   ()
mult :: (f s, f t) -> f (s, t)

pure :: x -> f x
pure x = fmap (const x) (unit ())
(<*>) :: f (s -> t) -> f s -> f t
ff <*> fs = fmap (uncurry ($)) (mult (ff, fs))

Для строгого моноидального функтора unit и mult должны быть изоморфизмы . Влияние "слабости" заключается в том, чтобы отбросить это требование.

Например, (до обычной наивности) (->) a строго моноидален, но [] только слабо моноидален.

...