Implementando un intérprete de idiomas en Haskell

Quiero implementar un intérprete de lenguaje imperativo en Haskell (con fines educativos). Pero me resulta difícil crear la arquitectura correcta para mi intérprete: ¿Cómo debo almacenar las variables? ¿Cómo puedo implementar llamadas de función anidadas? ¿Cómo debo implementar el alcance variable? ¿Cómo puedo agregar posibilidades de depuración en mi idioma? ¿Debo usar mónadas / transformadores de mónada / otras técnicas? etc.

¿Alguien sabe buenos artículos / documentos / tutoriales / fuentes sobre este tema?

Respuestas a la pregunta(2)

Su respuesta a la pregunta