← All posts tagged Haskell

Ок, раз #2870836/4, то вместо гугла буду спрашивать сюда.

Написал я парсер yaml'а, примерно как вот этот — github.com


Как лучше всего реализовать необязательные ключи? Чтоб при отсутствии определенных элементов использовалось некое дефолтное значение?

Что-то опять зачесались руки попробовать на хаскелле пописать. И задача как раз есть умеренной сложности. Но знаю, что ведь тупой слишком, и только зря время потеряю, но все равно хочется...

Подскажите, пожалуйста, как отформатировать дату на русском языке? аналог strftime("%B %Y"). Нагуглил вот это — hackage.haskell.org , но там локаль надо самому писать и в функцию передавать. А как системную использовать?

Ну вот, небольших успехов добился. Подытожу наблюдения за сегодня:
1. yesod в целом очень неплох, цельный и продуманный фреймворк.
2. компилирующиеся темплейты — мегакрутая идея.
3. Тайп-сейф урлы — шикарно
4. роутинг и хендлеры — нормально
5. виджеты — отличная концепция
6. Не совсем разобрался с наследованием темплейтов, с лайаутами
7. Персистент — говно, которое даже до джанговского ОРМ и близко не дотягивает, не говоря уже об алхимии. Умеет только простейшие вещи, в более-менее сложных нужно писать SQL руками, что нивелирует все заявленные преимущества этого самого персистенса. Шутка ли, даже LIKE не умеет!
8. кондуит — хорошая идея, если реализация соответствует заявленным параметрам, то очень хорошо.
9. Все абстракции по делу, темплейт хаскелл использован только там, где без него совсем туго.
Вывод — для себя можно писать, и оттачивать навыки, в продакшен пока не рискнул бы. Все-таки, без нормального ОРМ там туговато будет.

Появилось немного свободного времени, решил попробовать поднять штангу. Двадцатпятая попытка. Задача — привести этот сайтик в человеческий вид molodejka.in.ua
В общем, впечатление двойственное. С одной стороны, тайпчекер ловит дохренища ошибок, которые в динамическом языке пришлось бы ловить либо юниттестами, либо ручным тестированием. Но с другой стороны, появляется большой оверхед на преодоление проблем, которые этот тайпчекер создает. Например, надо выполнить сложный запрос через rawQuery. Он возвращает список PersistValue. А мне нужно число, Int. Пишу функцию, которая паттерн-матчингом достает число, трачу на это минут 15 пока соображу да найду список конструкторов. Тут сюрприз — Int и Int64 разные типы. Опять мудохаться. За это время в пейтоне можно было юнит-тест накидать. В общем, выгоды пока не выходит особо.
Еще добивает что циклы все делаются либо через рекурсию, либо через вызовы функций типа fold, map, или им подобных. У меня где-то в 3-4 раза больше времени уходит, пока соображу как делать. С традиционными императивными for и while гораздо проще и нагляднее.
Просто нытье, чтоб выговориться, можно особо не отвечать.

Появилось немного свободного времени, решил на досуге с yesod'ом поиграться. В результате уже вторые сутки пытаюсь скомпилить все его зависимости. То такая ошибка вылезет, то эдакая. Ну че за херня в самом деле...

Как же ты долго компилируешься... так хочется запустить свою программу на серваке, но вот уже около часа наблюдаю веселые буковки не экране...