Jak mam przedstawić AST z dodatkowymi informacjami?
Powiedzmy, że mam prosty typ danych reprezentujący AST w jakimś języku:
data Term = Var String
| Num Integer
| Expr [Term]
(W rzeczywistości miałoby to oczywiście więcej konstruktorów niż to.)
Mogę to wykorzystać do napisania prostej funkcji oceny, która pasuje do struktury AST:
eval :: Term -> Result
eval (Var name) = lookup name
eval (Num n) = return n
eval (Expr exprs) = ...
Czy mogę dodawać adnotacje AST z informacjami takimi jak numery linii bez zmiany sposobu działania dopasowywania wzoru?
(Gdybym nie miał nic przeciwko zmianie wzorców, mógłbym oczywiście użyć składni zapisu lub wzorców widoku).