Предлагаю читателям «Хабрахабра» перевод статьи «Why free monads matter».
Интерпретаторы
Хорошие программисты разделяют данные и интерпретаторы, которые эти данные обрабатывают. Примером могут служить компиляторы, представляющие исходный код как абстрактное синтаксическое дерево, которое впоследствие может быть обработано одним из многочисленных интерпретаторов. А именно, мы можем:
- скомпилировать и выполнить его;
- непосредственно запустить с помощью традиционного интерпретатора;
- сжать и архивировать;
- просто оставить его в покое.
Преимущества такого разделения очевидны. Давайте попытаемся построить абстракцию, отображающую суть синтаксического дерева. Лучше начать с конкретного примера. Для этого мы спроектируем наш собственный игрушечный язык и попытается оформить его в виде типа данных.
Читать полностью »