fantasy-land/id :: Category c => () -> c a a
我真的不明白这个签名在说什么? id
是一种方法,它接受零个参数并返回属于Category的东西和另外两个东西。
正确吗?这有什么意义?
类别由对象和态射(箭头)组成。如果要在Haskell内定义类别,则几乎将对象作为类型卡住了。但是对于任何两个对象,您都可以定义一组射射:hom-set。在这里,c
是一个类型构造函数,它接受两个对象(类型),例如a
和b
,并产生一个hom-set c a b
。在最简单的示例中,只需将c
替换为(->)
。在这种情况下,c a b
变为a->b
(使用中缀符号)。同样,c a a
对应于a->a
。这些词素之一被称为同一性词素。函数() -> c a a
选择该态射。完整的定义还必须包括组成运算符(.)
,该运算符采用两个可组合的hom-set并产生第三个hom-set,以及定律。但是,Haskell无法表达单位法和关联法。