我正在尝试定义 Idris 类型内部的已验证类别,但我的方法不进行类型检查。
class Cat ob (mor : ob -> ob -> Type) where
comp : {a : ob} -> {b : ob} -> {c : ob} -> mor a b -> mor b c -> mor a c
unit : (a : ob) -> mor a a
l : {a,b : ob} -> {f : mor a b} -> (comp (unit a) f) = f
ob
是对象mor a b
的类型,是从a
到的态射类型b
。仍然会有正确的单位和结合律,但我的定义已经l
不起作用了。它说:
When elaborating type of constructor of Main.Cat:
When elaborating an application of comp:
Can't unify
mor a13 b14 (Type of f)
with
mor b14 c (Expected type)
我觉得这很混乱。unit a
有类型mor a a
,f
有类型mor a b
,为什么没有comp (unit a) f
类型mor a b
呢?