Это просто парсер для выражений с переменными. На самом деле интерпретация выражения - это совершенно отдельный вопрос.
Вы должны создать функцию, которая принимает уже проанализированное выражение и значения для переменных и возвращает результат вычисления выражения. Псевдокод:
evaluate :: Expr -> Map String Int -> Int
evaluate (Num n) _ = n
evaluate (Var x) vars = {- Look up the value of x in vars -}
evaluate (Plus e f) vars = {- Evaluate e and f, and return their sum -}
...
Я намеренно пропустил некоторые детали; надеюсь, изучив недостающие части, вы узнаете больше о Haskell.
В качестве следующего шага вам, вероятно, следует взглянуть на монаду Reader
для удобного способа передачи карты переменных vars
и использования Maybe
или Error
для сигнализации об ошибках, например, ссылка на переменную, которая не связана в vars
, или деление на ноль.