Что означает "слабый" в "слабый моноидальный функтор"? - программирование
Подтвердить что ты не робот

Что означает "слабый" в "слабый моноидальный функтор"?

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

4b9b3361

Ответ 1

Позвольте перейти к моноидальному виду 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 строго моноидальна, но [] является только слабой моноидальной.