Реализация языкового переводчика в Хаскеле
Я хочу внедрить обязательный переводчик языка в Haskell (для образовательных целей). Но это'Мне сложно создать правильную архитектуру для моего интерпретатора: как хранить переменные? Как я могу реализовать вызовы вложенных функций? Как мне реализовать переменную область видимости? Как я могу добавить возможности отладки на моем языке? Должен ли я использовать монады / монадные трансформаторы / другие методы? и т.п.
Кто-нибудь знает хорошие статьи / статьи / учебники / источники по этому вопросу?