to post messages and comments.

← All posts tagged Haskell

Господа. Я хочу генерировать код на нескольких, языках Golang, Python, JS . Есть описание структур данных в виде yaml списков. Я планирую по этим файлам построить AST и генерить для каждого языка код.
Подскажите что вы бы использовали для этой задачи. Ну или что принято использовать.

Господа. Созрел вопрос.
Итак есть функция github.com
Задача добавить перед ней вызов функции которая меняет State, в зависимости от Term-а (Если терм больше текущего LeaderState -> FollowerState) и вызвать пару функций в монаде Transition.
runTransitionT — это "синоним" RWST и state тут конкретный тип состояния (FollowerState/CandidateState/LeaderState), а не обобщённый(existential?) SomeState .
Я решил эту проблему вот таким способом : github.com
Т.е. сделал трансформерами RW без T и поменял тип вызываемых функций на более общий.

Может быть возможно как-то поменять Transition чтоб это влезало в одну монаду?

Сегодня узнал о наличии такого замечательного терминала mintty под винду, который умеет UTF-8 и наследован от putty . И всё для того чтоб нормально stack-ом собирать.
Вот теперь сижу и думаю: за что мне это все!

Вот кстати по стеку вопрос. Когда фиксил тесты для fast-logger-а увидел забавную штуку.
Запускаю stack test . И для wai-logger он выдаёт замечательные ошибки про System.Posix . Выясняется что в cabal файле. используется.
if os(windows)
   Cpp-Options: -DWINDOWS

И почему-то при сборке тестов этот флаг либы не учитывается, добавление этого флага тестам ничего не даёт. 

А сами тесты сделаны с помощью doctest:
-- $setup
-- >>> :set -XOverloadedStrings
-- >>> import Network.Wai.Test

он ругается что нет такого модуля. Добавление его в зависимости stack и cabal ничего не даёт.

Собственно у меня 2 вопроса:
1. Фиксится встроенным в GHC mingw32_HOST_OS , но как всё таки stack заставить нормально обрабатывать Cpp-Options.
2. Полагаю что дело в путях, но всё равно какая-то хуйня.

Доработал я либу чтоб можно было конфиги менять. И захотел рассказать забавную сказочку. Поскольку автор рекомендует конфиги менять удалением/добавлением одного узла за раз. То необходимо сделать так, чтоб конфиг из одного узла успешно работал. Такой себе вырожденный случай. Удаление же выполняется таким образом что удаляемому узлу сообщение не доходит и этот узел погрязает в вечных выборах, но его все игнорят.
Так вот если в конфиге из 3 узлов поочерёдно удалить 2 узла получится славная картина. 2 удалённых начнут выборы и смогут собрать majority и завалить одиночный узел лидера ну и сами сдохнут из-за неконсистентных конфигов.