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)