Месяц с Хаскелем

Photo Credit: WeGraphics

Месяц с Хаскелем

Вот и заканчивается месяц Хаскеля.
Бинарники, библиотеки, линковка. Писали на Хаскеле веб. Сейчас же на всем пишут веб! Удалось познакомиться с двумя веб фреймворками: Yesod и Snap Framework.

Snap Framework

Такой, аля Sinatra для Хаскеля. Простенький, приятный. Однако, чтобы написать что-нибудь сложнее чем hello-world - потребует от вас написать пару плагинов. Готовых компонентов мало. Молодой фреймворк.

Yesod

Yesod logo

Похож на Django. Очень много кодогенерации. ORM, JS, CSS, HTML, JSON Types - все это генерится. Изменил шаблон главной страницы - попал на перекомпиляцию. Очень грустно писать JS/CSS.
А в остальном - ВЕЩЬ. Все, что хочешь: авторизации, шаблоны, маппинг параметров, typesafe url, тесты. Кстати, о тестах.

Tests

Что-то не очень в Хаскель сообществе принято тесты писать. А я люблю тесты. С Yesod ситуация приемлимая. Можно написать тесты для JSON Rest. Присутствуют селекторы для построения HTML ассертов. Напрягает вывод при падении теста. Ну не пишет Yesod что сломалось. Пишет, что завалился. А разобраться почему - отдельный квест. К тестам обязательно нужен continuous integration. Тут засада. Дня 2 разбирался. Во первых - Yesod собирается минут 40 у меня локально на CoreI5. На тревисе это время можно легко умножить на 2. Да еще и билд тревиса постоянно норовит упасть со странными ошибками.
В итоге собирали на тревисе Docker образ из предзаготовленного, с установленным Yesod. Кстати, образ доступен на Docker Hub тыц.

Deploy

Опять же, не JVM. Бинарник собирается под платформу. Кросскомпиляцию делать лень. С тревиса забирать - странная затея. Опять помог Docker с предзаготовленным Yesod.
Памяти жрет много. Сравнимо с JVM. Даже, иногда больше. Но это уже проблема кривых рук. Ведь в Хаскеле, по умолчанию, используется lazy-evaluation. Написал красивую рекурсивную функцию, а по памяти просел мегабайт на 10. Следить надо. А следить - сложно.

Development

Разработка на Хаскеле легко может напугать ребят из мира Java/C#. Тут все очень похоже на С++. Компилятор чего-то постоянно собирает. Странные, ничего не говорящие ошибки. Циклические импорты. Линковка.
Все плохо с IDE. Почитав интернеты, я остановился на SublimeHaskell. Автокомплит. Тесты запускаются автоматически. Но, автокомплит глупый-глупый. Можно узнать тип используемой функции. Опять же - не всегда.

Хаскель - вещь классная. Огорчает инфраструктура. Очень похоже на ситуацию с NPM. Полно пакетов. Документации ноль. Как настраивать - не понятно. Сырые инструменты, велосипеды.
Надо попробовать написать что-нибудь без веба. Пойдемте на хакатон?