簡體   English   中英

Haskell中的算子如何與類別理論中的算子相關?

[英]How are functors in Haskell related to functors in category theory?

據我所知,仿函數是兩個類別之間的映射,例如來自對象 C 對象中的對象 d 哪里 C d 是類別。

在Haskell中有Hask ,其中對象是Haskell類型,而態射是Haskell函數。 但是, Functor類型類有一個函數fmap ,它在這些類型之間進行映射(因此它們是對象而不是類本身):

fmap :: (a -> b) -> f a -> f b

fafb都是Hask中的對象。 這是否意味着Haskell中的Functor每個實例都是一個endofunctor,如果沒有, Functor真的代表一個仿函數?

我在這里錯過了什么? 類型也是Haskell中的類別嗎?

Functor一個實例指定了兩件事:類型構造函數F的種類* -> * ,即從Hask的對象到Hask的對象的映射,以及類型的函數(a -> b) -> (F a -> F b) ,即從Hask的箭頭到與對象映射F兼容的Hask的箭頭的映射。 所以,是的, Functor所有實例都是endofunctors。 Hackage有幾種可用的概括,例如Control.Categorical.Functor

是的,所有Functor實例都是Hask上的endofunctors - 事實上,來自所有Hask的endofunctors到一個適當的子類,其對象是通過應用特定類型構造函數獲得的類型。 該類型構造函數與Functor實例相關聯,並提供對象的映射; 態射的映射是fmap ,它(因為我們只關注笛卡爾閉合范疇的endofunctors)本身就是Hask中的態射系列

除了那些可以有Functor實例的函數之外,考慮其他函子是有意義的,例如逆變函子 (從Hask到它的相反類別)。 Arrow類中arr函數也對應於一個仿函數,從所有Hask到其對象與Hask的對象相同的類別 ,其狀態由與Arrow實例關聯的類型構造函數描述。

進一步的概括也是可能的(正如Daniel Wagner指出的那樣),但使用起來往往變得越來越尷尬。

關於這一點的一個重要的一點是,你真正想要的是富含 Hask的函子,而不僅僅是普通的舊子。 Hask是笛卡爾閉合的( 不是真的 ,但它很難成為那樣),因此它本身就是自然豐富的。

現在,豐富的endofunctors為你提供了一種限制語言中可實現的方法 :一個豐富的函子Hask - > Hask是對象(類型) fa和每對對象a, b一個函數Hask中的態射f: Hask (a,b) - > Hask (fa,fb) 當然,這只是fmap :: (a -> b) -> fa -> fb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM