X
函数通过类型检查,但是DependentMealy没有通过。在我看来,他们都是一样的。第一个参数是状态。第二个参数是一个函数,该函数提供当前状态下机器的输入类型。第三个参数是给出新状态的函数。第四个参数是一个函数,它给出了粉煤机的输出类型。状态应该是类型级别。
X : state -> (opt : state -> Type) -> ((s : state) -> opt s -> state) -> ((s : state) -> opt s -> Type) -> Type
X s f1 f2 f3 = (op : f1 s) -> (f3 s op, X (f2 s op) f1 f2 f3)
data DependentMealy : state -> (opt : state -> Type) -> ((s : state) -> opt s -> state) -> ((s : state) -> opt s -> Type) -> Type where
MkDependentMealy : ((op : f1 s) -> (f3 s op, DependentMealy (f2 s op) f1 f2 f3)) -> DependentMealy s f1 f2 f3
检查
NewM.MkDependentMealy
的类型时: 检查NewM.DependentMealy
的应用程序时:类型之间不匹配
phTy -> f1 s -> Type (Type of f3)
和
(s8 : phTy) -> f1 s8 -> Type (Expected type)
具体来说: 之间的类型不匹配
f1 s
和
f1 v0