Я думаю, что один из первых вопросов, который задают все новички в haskell, когда они хотят знать: «Могу я что-нибудь сделать?»такое «какими должны быть типы?».Если вы хотите сделать то, что вам нужно, то я бы предложил написать AST примерно так:
data AST = Num Int
| Add AST AST
| Sub AST AST
| Mul AST AST
etc.
Тогда вы могли бы написать потенциально парсер с типом:
parseAST :: String -> AST
Чтобы написать этот синтаксический анализатор, вы, вероятно, захотите использовать что-то вроде parsec, хотя, если вы описали грамматику, то вы, вероятно, могли бы написать свой собственный синтаксический анализ, который будет работать довольно хорошо (и поможет вам научиться)..
Оттуда вы можете написать функции, которые могут оценивать AST или манипулировать им так, как вам нравится.Но важно понимать, что вы не можете * создавать новый код во время выполнения, потому что очень вероятно, что он не будет безопасным по типу или вообще не безопасным.
* Я уверен, что есть способы сделать это, но я чувствовал, что более важно развивать идеи, которые начинающий программист haskell должен изучить, прежде чем перейти к более сложным темам.