История изменений
Исправление quasimoto, (текущая версия) :
В моём примере не было парсинга, он добавляется с помощью Read в deriving, и это не хаскель программы, а просто дефолтное текстовое представление термов ADT (show . read = TextRep, read . show = ADT).
А аст это например вот — http://www.boost.org/doc/libs/1_41_0/libs/spirit/example/qi/calc2_ast.cpp, то есть если обвешаться бустом (там variants для сумм, например), то будет лучше, но всё равно далеко от нормальных ADT + PM (!) + Guards (!), так что исходный пример из топика всё равно проблематично писать.
Исходная версия quasimoto, :
В моём примере не было парсинга, он добавляется с помощью Read в deriving, и это не хаскель программы, а просто дефолтное текстовое представление термов ADT (show . read = TextRep, read . show = ADT).
А аст это например вот — http://www.boost.org/doc/libs/1_41_0/libs/spirit/example/qi/calc2_ast.cpp, то есть если обвешаться бустом (там variants для сумм, например), то будет лучше, но всё равно далеко от нормальных ADT + PM (!) + Guards (!), так что исходный пример всё равно проблематично писать.