Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Idris认为标识符的前缀是关键字?_Idris_Internals - Fatal编程技术网

为什么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
的格式,要么像您所说的那样使用修饰符。