Вот, было немного свободного времени, захотел покрутить Хаскель. Сам учебник был прочтен быстро, решил попробовать какую-нибудь задачку посложнее. В результате вспомнил о LOR-contest:
http://www.linux.org.ru/wiki/en/LOR-contest
Само решение было написано за день. Правда, по памяти задачу вспомнил неточно, потому кое-что не сделано, например, нормальный ввод-вывод. Кроме того, не было под рукой сетевых библиотек, равно, как и Internet, потому сетевой подсистемы тоже нет.
В целом, получилось намного лучше, чем я ожидал. Даже если добавить сеть и допилить вывод, то будет где-то даже лучше Ocaml. Статическая типизация очень понравилась -- после Python и JavaScript рефакторить код (а это неотъемлемая часть задачи) одно удовольствие. Из недостатков могу отметить отсутствие рефлексии (возможность встроить REPL в интерфейс, как в Lisp) и метапрограммирования (возможность генерировать тела функций). Впрочем, не исключено, что последнее я просто ниасилил.
Думал, как прикрутить STM (особенно, к волновому алгоритму) -- немного задалбывает гонять весь мир в функциях на вход и выход. Но потом как-то взвесил, и решил оставить, как есть.
В общем, если есть энтузиасты-знатоки, можете допилить код до полного соответствия правилам. У меня просто закончился лимит времени на самообучение.
Лично мне интересно будет посмотреть на считалку на Хаскеле, и, возможно, решение на Erlang.
P.S. При восстановлении старых результатов не смог восстановить версии на Python и Ocaml с хорошими характеристиками. Если найдутся дотошные -- пусть меня поправят. Если ошибки в замерах и есть, то они исключительно по недоразумению, а не от желания пропиарить одни языки в ущерб другим. В общем, делайте замечания -- поправим.
>>>