Closed FizzyElt closed 9 months ago
目前不知道要用怎麼樣的方式呈現這四個定律,單純這樣寫出來沒人看得懂 🙃
Lax monoidal functor
但我覺得更根本的問題是代數語義跟代數語法本來就有差
在大部分的程式語言裡面根本沒辦法解釋這件事,畢竟型別在這裡只約束語法的部分
而實現律是源自語義
當一個範疇 $\mathcal{C}$
對兩個 monoidal category $\mathcal{C}, \mathcal{D}$ 保持 monoid 結構映射的 functor
所以
Lax monoidal functor 更寬鬆的部分是指用 $\bullet$ 取代 $\otimes_\mathcal{D}$,也就是說結構依然保留,但是 $\bullet$ 只需要是一個 bifunctor,不需要滿足 monoid category 的其他條件
我已經深切體會到這個有多進階了,需要仔細考慮 2-cat, enriched 跟 monoidal cat 之後再想吧,暫時可以放棄
Applicative Laws
pure id <*> v = v
pure (· ∘ ·) <*> u <*> v <*> w = u <*> (v <*> w)
pure f <*> pure x = pure (f x)
u <*> pure x = pure (fun f => f x) <*> u
取自 Lean Applicative, Haskell Applicative
如果容器內部為一個純值是無法做
<*>
,seq
的,即f a
但我們可以將f a
改寫成f (Unit → a)