"lax"在"lax monoidal functor"中是什么意思?

What does "lax" mean in "lax monoidal functor"?

我知道 Applicative class 在范畴论中被描述为 "lax monoidal functor" 但我以前从未听说过 "lax" 这个词,并且 the nlab page on lax functor 一堆我根本不认识的东西,回复:双类别和我不知道我们在 Haskell 中关心的东西。如果它实际上是关于双范畴的,有人能给我一个关于这意味着什么的普通观点吗?不然"lax"这个名字在干什么?

让我们切换到 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))

对于 strict 幺半群仿函数,unitmult 必须是 同构 。 "lax" 的影响是放弃该要求。

例如,(达到通常的天真程度)(->) a 是严格单向的,但 [] 只是松弛单向的。