Haskell 什么是;“宽松”;“中的平均值”;lax幺半函子;?
我知道,Haskell 什么是;“宽松”;“中的平均值”;lax幺半函子;?,haskell,applicative,category-theory,Haskell,Applicative,Category Theory,我知道,Applicative类在范畴论中被描述为一个“lax幺半函子”,但我以前从未听说过“lax”这个词,还有一大堆我根本不认识的东西,关于双范畴和我不知道我们在Haskell中关心的东西。如果它实际上是关于两大类,有人能给我一个关于这意味着什么的平民观点吗?否则,“lax”在这个名称中做什么呢?让我们切换到Applicative的monoid视图: unit :: () -> f () mult :: (f s, f t) -> f (s, t) pure
Applicative
类在范畴论中被描述为一个“lax幺半函子”,但我以前从未听说过“lax”这个词,还有一大堆我根本不认识的东西,关于双范畴和我不知道我们在Haskell中关心的东西。如果它实际上是关于两大类,有人能给我一个关于这意味着什么的平民观点吗?否则,“lax”在这个名称中做什么呢?让我们切换到Applicative
的monoid视图:
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))
单位::()->f()
mult::(FS,FT)->f(s,t)
纯::x->fx
纯x=fmap(常数x)(单位())
()::f(s->t)->f s->f t
ff fs=fmap(未到期($)(多个(ff,fs))
对于严格幺半函子,unit
和mult
必须是同构的。“宽松”的影响是放弃这一要求
例如,(直到通常的朴素)
(>)a
是严格的幺半群,但[]
只是松散的幺半群。错误的nlab页。我不确定这里给出的unit
和mult
是如何构成同构的,因为不清楚unit
和mult
是如何构成的,更不用说unit了。mult==mult。unit==id
。我不是说它们是一对相互的倒数:我是说它们每个都有倒数。