考虑以下片段:
import Data.List
%default total
x : Elem 1 [1, 2]
x = Here
type : Type
type = Elem 1 [1, 2]
y : type
y = Here
这给出了错误:
检查y的右侧时: 类型不匹配 Elem x(x :: xs)(这里的类型) 和 iType(预期类型)
查询时y
的类型为:
type : Type
-----------
y : type
是否可以在type
的类型归属期间或之前强制y
进行评估,以便y
的类型为Elem 1 [1, 2]
?
我的用例是我希望能够定义返回校对的正确命题术语的通用谓词,例如:
subset : List a -> List a -> Type
subset xs ys = (e : a) -> Elem e xs -> Elem e ys
thm_filter_subset : subset (filter p xs) xs
答案 0 :(得分:6)
以小写字母开头的类型声明中的名称是隐式绑定的,因此它会处理' type'作为类型参数。您可以输入'输入'一个以资本开头的新名称(按照惯例,这是大多数人在伊德里斯所做的事情),或者您可以使用其中的模块(主要,此处)明确限定名称。
伊德里斯过去常常猜测是否会输入' type'等名称。本文旨在暗示或意图引用全球。虽然有各种各样的伏都教,但它经常失败,所以它现在实现了这个更简单的规则。在这种情况下,这有点令人讨厌,但替代行为更令人讨厌(并且更难解释)。