haskell與范疇論總結(jié)

這篇文章只會(huì)大概解釋一下,具體內(nèi)容需要參考文中提到的連接。Haskell語言學(xué)習(xí)可以看這個(gè)教程,這篇文章不會(huì)介紹Haskell語言的具體細(xì)節(jié)。

范疇論的介紹,這篇東西到functor那里都不錯(cuò):haskell和category theory

幾個(gè)概念:

`object`,`morphism`(object之間的態(tài)射,函數(shù)就是集合元素(object)上的態(tài)射),`composition`(函數(shù)復(fù)合)。id morphism是自己映射到自己的特殊morphism。

Hask是haskell關(guān)注的范疇,它是由haskell的所有類型(object)和函數(shù)(morphism)組成的。

functor函子)是兩個(gè)范疇的關(guān)系,它包含兩點(diǎn),(1)將一個(gè)范疇的object映射到另外一個(gè)范疇的object。(2)將一個(gè)范疇的morphism映射到另外一個(gè)范疇的morphism。而且要滿足兩個(gè)約束(1)A范疇的id morphism通過functor映射到B范疇的morphism必須是B范疇的id morphism。(2)對于一個(gè)范疇的兩個(gè)morphism f 和 g,還有一個(gè)functor F,必須有F(f . g) = F(f) . F(g),其中 . 表示函數(shù)復(fù)合。

在haskell中,functor實(shí)際上由兩部分完成,一部分是typeconstructor(映射對象到對象),另一部分是Functor(映射函數(shù)到函數(shù))

class Functor (f :: * -> *) where

? ? fmap :: (a -> b) -> f a -> f b ? ? ? -- f 是某個(gè)類型的 typeconstructor

然后是natual transformation自然變換):看這里的natual transformation部分

A?natural transformation?natural transformation??is a mapping between functors that preserves the structure of the underlying categories.

因?yàn)閒unctor由兩部分組成,所以自然變換也由兩部分組成:(1)另個(gè)范疇之間object的映射。(2)另個(gè)范疇之間morphism的映射。而且自然變換需要滿足以下兩個(gè)過程結(jié)果等價(jià):(1)一個(gè)對象在自己的范疇做映射后,再根據(jù)自然變換映射到另外一個(gè)范疇。(2)一個(gè)對象先根據(jù)自然變換映射到另外一個(gè)范疇,再做映射(這里的映射也是根據(jù)原來的映射進(jìn)行自然變換得到的),這個(gè)約束那篇鏈接有清晰的解釋。

Monad

具體參考

在范疇 X 上的Monad由一個(gè)Endofunctor T:X -> X?和 兩個(gè)自然變換join和unit組成。

unit:Ix -> T (Ix是范疇X上的幺元)

join:T 。T -> T

兩個(gè)自然變換需要滿足一些條件,看上面的“具體參考”。

Monad也可以換到群上面來解釋。

Monad是自函子范疇上的一個(gè)含幺半群。這個(gè)范疇的object是自函子(Endofunctor),它的morphism是自函子上的自然變換。這個(gè)含幺半群的集合是自函子,笛卡爾積是自函子復(fù)合,二元運(yùn)算(也就是求笛卡爾積)是自函子復(fù)合,二元運(yùn)算結(jié)果的值由 自然變換join:T。T -> T來決定,幺元是自然變換unit(還是identity Endofunctor?現(xiàn)在還沒明白)。

stackoverflow上的解釋

一個(gè)一個(gè)來解釋。

含幺半群這里不解釋,我們大一下的離散數(shù)學(xué)里面代數(shù)系統(tǒng)的部分有學(xué)到。

Endofunctor自函子):指的是連接兩個(gè)相同范疇的functor。Haskell的所有functor都是Endofunctor,Haskell的functor是連接Hask到Hask的Endofunctor。

Monad要求在自函子范疇上,至少有兩個(gè)自然變換,一個(gè)是unit:X→M(X),一個(gè)是join:M(M(X))→M(X)。上面M指的是一個(gè)functor,具體看回haskell和category theory的monad部分。

同時(shí)Monad也可以說是一個(gè)functor。它連接兩個(gè)范疇,一個(gè)是identity functor,一個(gè)是任何functor(在Haskell中可以是Maybe functor或者List functor)。

對應(yīng)到Haskell里面,我們拿Maybe來舉例。Maybe在Haskell中首先是一個(gè)functor(同時(shí)也是Endofunctor),它由typeconstructor和Functor typeclass兩部分分別實(shí)現(xiàn)object之間的映射和函數(shù)(morphism)之間的映射。然后Maybe也是一個(gè)monad,它連接identity functor和Maybe functor。Maybe的join指明了自然變換中對object的變換。

這里需要理解Self-similarity(自相似)。自相似指整體結(jié)構(gòu)與其局部結(jié)構(gòu)相似。Hask的整體與局部具有自相似性,而functor連接了Hask的整體與局部,使整體所具有的性質(zhì)能夠在局部中使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容