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)