【发布时间】:2015-01-08 15:08:28
【问题描述】:
据我了解,Hask范畴的典型解释是该范畴的对象是Haskell类型,而态射是Haskell函数。
这样解释:
{-# LANGUAGE DataKinds, TypeOperators, TypeFamilies #-}
data Nat = Z | S Nat
type family Map (f :: Nat -> Nat) (x :: [Nat]) :: [Nat] where
Map f '[] = '[]
Map f (x ': xs) = (f x) ': (Map f (xs))
我们可以将Z 解释为Hask 的单个对象子类别,将S a 解释为函子,将类别Z 映射到类别S Z,并将其映射到类别S(S Z),等等……
那么,和一个类型级别的提升列表(例如),一个类型级别的仿函数(如Map)会成为Hask的2类仿函数吗?
【问题讨论】:
-
Hask 是其对象具有种类
*的类别,因此Z-as-only-object 不是子类别,因为它具有种类Nat。不过,您当然可以将Z视为一个类别——但态射是什么?如果不存在非平凡的,它甚至可能不会使这个想法无效,但我什至不知道如何称呼这些态射。 -
除了恒等态射之外没有态射。