Haskell 在範疇理論中的應用
一個 Haskell 的 Functor
允許一個任何型別的 a
(的目的對映 Hask )到型別 F a
並且還對映函式 a -> b
(的態射 Hask )與型別 F a -> F b
的功能。這對應於類別理論定義,在某種意義上,仿函式保留了基本的類別結構。
一個 monoidal 範疇是有一些類別的其他結構:
- 張量積(見 Hask 中的型別產品 )
- 張量單位(單位物件)
將一對作為我們的產品,可以通過以下方式將此定義轉換為 Haskell:
class Functor f => Monoidal f where
mcat::f a -> f b -> f (a,b)
munit::f ()
Applicative
類相當於這個 Monoidal
類,因此可以用它來實現:
instance Monoidal f => Applicative f where
pure x = fmap (const x) munit
f <*> fa = (\(f, a) -> f a) <$> (mcat f fa)