代码之家  ›  专栏  ›  技术社区  ›  luqui

“lax幺半函子”中的“lax”是什么意思?

  •  16
  • luqui  · 技术社区  · 6 年前

    我知道 Applicative 类在范畴论中被描述为“lax幺半函子”,但我以前从未听说过“lax”这个词,而且 the nlab page on lax functor 一堆我根本不认识的东西,关于:两大类和我不知道我们在哈斯克尔关心的东西。如果这真的是关于两大类,有人能给我一个普普通通的看法,这意味着什么?否则,“lax”以这个名义在干什么?

    1 回复  |  直到 6 年前
        1
  •  23
  •   pigworker    6 年前

    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 [] 只有松弛的单倍体。