类型不匹配的检测机

时间:2018-12-16 00:28:40

标签: idris

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

0 个答案:

没有答案