为什么Idris认为标识符的前缀是关键字?

时间:2019-06-19 18:01:51

标签: idris internals

尝试解释此代码时

injective : {A : Type} ->
            {P : A -> Type} ->
            ((x : A) -> P x) ->
            Type

我得到了错误

   |
14 | injective : {A : Type} ->
   |           ^
not a terminator

这真的使我困惑。当我在声明上写private时,错误似乎消失了,所以我猜那些访问修饰符确实改变了解析的方式。但是,我不知道为什么会这样。

那为什么会显示该错误?如果我不将in放在前面,为什么解析器会认为private是一个关键字(我想这是问题)而不是标识符的一部分?

[EDIT]:要获取此错误,此代码应足够:

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的解释器。

1 个答案:

答案 0 :(得分:0)

您的代码对我来说很好。过去,我遇到not a terminator错误时,几乎总是由于我犯了一些缩进错误。但是我不知道private修饰符会发生什么变化,以使其适合您的情况。