Синтаксическая ошибка при использовании представлений

У меня есть следующий код (в основном сгенерированный автоматически, играя с idris-mode в emacs):

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

person Ramon Snir    schedule 09.08.2014    source источник


Ответы (1)


Это не ты сделал что-то не так, а Идрис! Вещь после ? должен быть действительным идентификатором, поэтому, если вы замените ?(plus_1 n n)_rhs чем-то вроде ?plus_1_n_n_rhs, все должно быть в порядке.

Это ошибка в Idris, но я не видел ее раньше и не могу легко воспроизвести — она генерирует разумные имена, когда я пытаюсь это построить. Если вы можете опубликовать шаги для воспроизведения в системе отслеживания проблем по адресу https://github.com/idris-lang/Idris-dev/issues, тогда я посмотрю!

person Edwin Brady    schedule 09.08.2014
comment
Открытые проблемы: github.com/idris-lang/Idris-dev/issues/1464 и github.com/idris-lang/Idris-dev/issues /1465 - person Ramon Snir; 09.08.2014