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).

questionAnswers(1)

yourAnswerToTheQuestion