Haskell 在範疇理論中的應用

一個 Haskell 的 Functor 允許一個任何型別的 a(的目的對映 Hask )到型別 F a 並且還對映函式 a -> b(的態射 Hask )與型別 F a -> F b 的功能。這對應於類別理論定義,在某種意義上,仿函式保留了基本的類別結構。

一個 monoidal 範疇是有一些類別的其他結構:

將一對作為我們的產品,可以通過以下方式將此定義轉換為 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)