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