为什么Idris认为标识符的前缀是关键字?
当试图解释此代码时为什么Idris认为标识符的前缀是关键字?,idris,internals,Idris,Internals,当试图解释此代码时 injective : {A : Type} -> {P : A -> Type} -> ((x : A) -> P x) -> Type 我得到了错误 | 14 | injective : {A : Type} -> | ^ not a terminator 这真的让我很困惑。当我在声明上写private时,错误似乎消失了,所以我猜
injective : {A : Type} ->
{P : A -> Type} ->
((x : A) -> P x) ->
Type
我得到了错误
|
14 | injective : {A : Type} ->
| ^
not a terminator
这真的让我很困惑。当我在声明上写private
时,错误似乎消失了,所以我猜这些访问修饰符确实改变了解析的工作方式。然而,我不明白为什么会这样
那么,为什么会出现这种错误呢?如果我没有将private
放在前面,为什么解析器认为in
是一个关键字(我猜这就是问题所在)而不是标识符的一部分
[编辑]:要获取错误,此代码应足够:
Subset : Type -> Type
Subset a = a -> Type
syntax [x] "in" [y] = y x
Test : Type
Test = Nat
injective : {a, b : Type} ->
(a -> b) ->
Type
injective {a} {b} f = (x, y : a) ->
f x = f y ->
x = y
我正在使用Idris 1.3.1的解释器。您的代码对我来说编译得很好。过去,当我有
而不是终止符错误时,几乎总是因为我犯了一些缩进错误。但是我不知道什么是private
修饰符会改变,这样它就可以在你的情况下工作。好的,对不起,我应该在发布之前测试一下。我已经将错误所需的代码缩减到问题中的代码。好的,至少现在我可以确认它没有编译。要么将语法更改为类似于foo
的格式,要么像您所说的那样使用修饰符。