← All posts tagged Haskell

Весь твитор бугуртит о том, что в Омске запретили рок-оперу про Иисуса Христа. Погуглил, нашёл новость: vesti.ru
Цитата:
«Убрать легендарную оперу из репертуара местных театров, представители движения "Семья, Любовь, Отечество" требовали еще год назад. Но тогда к этим протестам общественность осталась глуха, с аншлагом встретив спектакль на сцене Омской Филармонии.»

Гуглю эту организацию, нахожу сайт: omsk-semlot.ru
Снизу приписка:
«Сайт работает на Hakyll <jaspervdj.be> и живёт на GitHub <github.com>.
Исходный код данного сайта, а также все опубликованные на нём материалы распространяются на условиях свободной лицензии GNU GENERAL PUBLIC LICENSE <github.com>.»

Это кто-то из местных троллит, да?

Внезапно пришёл пулл-реквест на пакет, мейнтейнером которого я являюсь на хекедже. А я уже забыл логин-пароль-емейл, с которыми на хекедж ходят. Что делать? В форме сброса пароля все варианты перепробовал, и там меня забанили, похоже, за подозрение. Предложил контрибьютору стать новым мейнтейнером, а что для этого сделать — не знаю. Сам я вроде бы ничего особенного для этого в своё время не делал, просто залил пакет и всё.

Вот это та причина, по которой я выбрал г-о вместо х-я: github.com
Тупо не осилил. К тому же всё настолько прибито гвоздями, что не могу представить, как делать полшага влево-вправо.
В некоторых местах (парсеры-трансляторы) х-ь прям оптимальная вещь, удобнее которой не сыщешь, а в подобных примерах кровь кишки и содомия.

Ещё вот о попытке сделать э-г из х-я. Вот рассмотрим самый стандартный паттерн: стейтфул процессы.
В х-е предлагается хранить стейт в TVar, где-то «снаружи» от процесса. Как в таком случае принято удалять стейт, если процесс аварийно погиб? В э-е это делается автоматически и естественно, нет процесса — нет стейта (ну если конечно его в ETS не хранить, но так делать не принято, за исключением каких-нибудь экзотических случаев).
И почему в х-е не принято хранить стейт процесса в самом процессе, мутируя его с помощью рекурсивного вызова функции вида loop? Чтобы никаких дополнительных «внешних» TVar не делать. Висит loop на канале, ждёт сообщение, принимает сообщение, вызывает сама себя уже с новым стейтом. В чём проблемы так делать? Или какие-то подводные камни есть?

При сборке пишет:
The program 'alex' is required but it could not be found.

Его действительно в PATH нет, но он указан в cabal-файле. По идее stack должен его собрать и использовать. Почему не так?

Добавляешь в зависимость scotty @ ждёшь полчаса, пока скомпилится.
Чего в обычный веб-север можно такого напихать, чтобы потребовалось столько зависимостей и столько компиляций?

ghc-cabal:
/home/mtreskin/.stack/programs/x86_64-linux/ghc-7.10.2/lib/ghc-7.10.2/Cabal_96aI7pZyaxU3dsgngOxbdK/.copyFile2025503991738076217.tmp:
resource exhausted
ghc.mk:918: recipe for target 'install_packages' failed
make[1]: *** [install_packages] Error 1
Makefile:24: recipe for target 'install' failed
make: *** [install] Error 2

это ещё что такое? проявляется на линуксе при установке lts-3.2

Х-ь очень хорош для однопроходных вещей. Например, сделал запрос, обработал, вернул ответ. Или подал на вход DSL, распарсил, странслировал в Lua, записал на диск (или вернул ошибку). Тут просто супер. Но как делать на нём долгоживущие стейтфул сервисы — ума не приложу. Чтобы работал месяцами, разные пользователи там цеплялись, что-то делали, процессы запускались (всё как в э-ге, например). К нему же не подключишься к произвольному месту, если необходимость такого подключения явно не предугадал и возможность явно не сделал. Вот запустил, допустим, кучу процессов, и что? Как параметры без перезапуска поменять? Как что посмотреть? Куча вопросов, на которые я так и не нашёл ответа.