У меня есть такой код:
type boolean = T | F
type bexp = Const of boolean
| Var of variable
| Bop of bop * bexp * bexp
| Not of bexp
and bop = And | Or | Xor
and variable = { name: string; mutable value: boolean }
Позже, если я хочу создать переменную, мне нужно сделать:
let full = Var({name ="full"; value = F});;
Я бы предпочел не повторять «полный» дважды и хотел бы придумать какой-нибудь интроспективный способ получить имя в виде строки. Я думаю, что camlp4 может работать для этого, но понятия не имею, с чего начать.
Так что, в конечном итоге, я бы хотел сделать что-то вроде:
let full = Var({name = :letname:; value = F});;
Где: letname: заполнит текущую привязку let в виде строки вместо (в данном случае «full»). (синтаксис: letname: это просто предложение, другие идеи для синтаксиса, которые не будут конфликтовать с синтаксисом OCaml?)
Более краткий синтаксис, подобный этому, вероятно, будет предпочтительнее:
var full = F
Который затем расширился бы до:
let full = Var({name = "full"; value = F});;
Можно ли это сделать с camlp4, и если да, то как мне это сделать?
(при дальнейшем рассмотрении синтаксис: letname: или что-то подобное было бы более универсальным и полезным в других областях)