Я пишу (небольшой шаг) интерпретатор для простого императивного языка программирования на Haskell.Я хочу выполнить оценку вне монады ввода-вывода, и поэтому я пытаюсь использовать монаду ST для изменяемых переменных.Однако я понимаю, что это означает введение новой переменной типа фантома в мой тип значения, но тогда мой тип выражения также нуждается в этом, и затем мой тип выражения также нуждается в этом, и поэтому четвертый.
Мой вопрос заключается в том,Есть ли хорошие способы избежать этой проблемы.Могу ли я каким-то образом скрыть тип фантома?Я попытался сделать это, введя forall s.
в мои определения AST, но компилятор никогда не доволен этим.