fantasy-land/id :: Category c => () -> c a a
我真的不明白这个签名怎么说?
id
是一种方法,它接受零个参数,并返回类别和另外两件事。那是对的吗?这有什么意义呢?
最佳答案
类别由对象和态射(箭头)组成。如果要在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中无法表达。