Есть ли способ определить синтаксические замены для типов в Изабель / HOL?
Я хочу сделать что-то вроде этого:
syntax my_short_list :: "type" ("my-list")
translations "my_short_list" ⇌ (type) "'a list" ― ‹Could not find syntax to express this ...›
locale foo =
fixes blub :: "my-list ⇒ my-list"
И хочу, чтобы это интерпретировалось так:
locale foo =
fixes blub :: "'a list ⇒ 'a list"
(все вхождения my-list
заменены текстом 'a list
)
Выше приведено следующее сообщение об ошибке:
Error in syntax translation rule: rhs contains extra variables
"my_short_list" ↝ ("\<^type>List.list" 'a)
Итак, яищу вариант, который является чисто синтаксической заменой без каких-либо проверок макро-гигиены.
Некоторая справка для понимания основной проблемы:
У меня есть локаль с 5 параметрами типа и типом данных X
он принимает все 5 параметров типа, поэтому для каждого использования я должен написать ('a, 'b, 'c, 'd, 'e) X
. Очевидно, что имена на практике длиннее, поэтому это стало еще более нечитаемым.
Другие подходы, которые я пробовал:
- Определение типов или синонима типа в моей локали. Это недопустимо (см. https://stackoverflow.com/a/19281758/303637).
- Просто используйте другой параметр типа для представления
('a, 'b, 'c, 'd, 'e) X
и assumes
для всех необходимых свойств типа данных. Это много шаблонного, так как мне нужно написатьвниз все свойства, которые обычно генерируются автоматически для определений типов данных.