我有以下代码(主要是通过在emacs中使用idris-mode自动生成):
module Main
data Parity : Nat -> Type where
even : (n : Nat) -> Parity (n + n)
odd : (n : Nat) -> Parity (S (n + n))
parity : (n : Nat) -> Parity n
parity Z = ?parity_rhs_1
parity (S Z) = ?parity_rhs_3
parity (S (S k)) with (parity k)
parity (S (S (plus n n))) | (even n) = ?(plus_1 n n)_rhs
parity (S (S (S (plus n n)))) | (odd n) = ?(S_2 (plus n n))_rhs
---------- Proofs ----------
Main.parity_rhs_3 = proof
exact (odd 0)
Main.parity_rhs_1 = proof
exact (even 0)
当尝试将文件加载到REPL(C-c C-l)时,我收到以下错误消息:
- + Errors (1)
`-- ./Main.idr line 11 col 3:
error: expected: "{",
function declaration
parity (S (S (plus n n))) | (even n) = ?(plus_1 n n)_rhs
^
我想我做错了什么,但我无法弄清楚是什么。
$ idris --version
0.9.14.1-git:c6574b4
答案 0 :(得分:1)
不是你做错了什么,但伊德里斯!之后的事情?需要是有效的标识符,因此如果您使用?(plus_1 n n)_rhs
之类的内容替换?plus_1_n_n_rhs
,那么它应该没问题。
这是Idris中的一个错误,但不是我以前见过的错误,或者我可以轻松复制的错误 - 当我尝试构建它时会生成合理的名称。如果您可以在https://github.com/idris-lang/Idris-dev/issues发布重现问题跟踪器的步骤,那么我会调查一下!