Cheese
notifaika/RSS.hs at master · cblp/notifaika https://github.com/cblp/notifaika/blob/master/src/Notifaika/RSS.hs
Kirill
спасибо)
Cheese
правда, линзы — это мягко говоря, не для новичков
Cheese
особенно всякие plate в этом xml-lens
Denis
я вот и думаю чего ты человека на три линзы послал
Cheese
я не сразу увидел, что человек из новичков пришёл
Kirill
Да линзы я худо бедно осилил
Kirill
data ApplicationData = ApplicationData { _fieldA :: a, _fieldB :: b } data UserData = UserData { _uFieldA :: Maybe a, _uFieldB :: Maybe b } есть подобного рода рекорды: рекорд приложения, где множество филдов разных типов и рекорд пользователя, где каждый тип обёрнут в Maybe. Как "применить" один рекорд на другой, без обилия копипасты или template haskell (его ещё не осилил)? Т.е. для всех не Nothing значений рекорда пользователя записать значение в рекорд приложения? пытался вот так, но, очевидно, ничего не вышло (не подумал): mergeConfiguration original user = foldl transfer original $ filter userSetValue originalOnUser where transfer original' (originalPath, userPath) = over originalPath (const $ fromJust $ preview userPath user) original' userSetValue (_, userPath) = isJust $ preview userPath user originalOnUser = [ fieldA , fieldB ] `zip` [ uFieldA , uFieldB ]
Vasiliy
изучаю хаскель, решил немного поразбираться с cloud haskell и реализовать bully algoritm (https://en.wikipedia.org/wiki/Bully_algorithm)
Vasiliy
у меня самая первая задача – при старте нового узла обнаружить все остальные узлы я так понял, что мне нужен distribributed-process-simplelocalnet? – Simple backend based on the TCP transport which offers node discovery based on UDP multicast т.е. если я правильно все понял: я запускаю 2 ноды и вызов findPeers на второй ноде должен что-то вернуть, но ничего не происходит main ∷ IO () main = do [host, port] ← getArgs backend ← initializeBackend host port initRemoteTable node ← newLocalNode backend peers ← findPeers backend 1000000 runProcess node $ forM_ peers $ say . show forever $ return ()
Vasiliy
ладно, начну-ка я сначала с их примера с master/slave, завтра
Alexander
IOHK task detected
Alexander
d-h-simplelocalnet / d-p-p2p
Alexander
проверь что не на ipv6 интерфейс, если патч пришлешь то спасибо
Alexander
и.к. network-transport-tcp его не умеют
Vasiliy
спасибо!
Alexander
лучше сразу понять как работает simplelocalnet и забить на мастер слейв
Alexander
я не помню условий но simplelocalnet работает в локальной сети только, или мультикаст сети
Alexander
и.к. поиск нод на основе мульткаста
Alexander
но адрес вроде фиксирован
Alexander
+ роутеры и провайдеры могут резать мультикаст
Alexander
если там требуется не только локальная сеть, то надо -p2p
Alexander
но надо знать адрес одной ноды хотя бы чтобы инициализировать сеть
Alexander
автор либы где-то вокруг есть я там апи не помню
Vasiliy
+ роутеры и провайдеры могут резать мультикаст
возможно в этом проблема лучше сразу делать p2p думаю
Alexander
у тебя ноды в разных сетях?
Vasiliy
про это не сказано в условиях задачи, думаю, можно придраться)
Vasiliy
https://bitbucket.org/dpwiz/distributed-process-p2p/ вот эта
Alexander
на хакадже смотри
Vasiliy
ну да, это оно https://hackage.haskell.org/package/distributed-process-p2p, завтра попробую, спасибо
Alexander
ага
Alexander
интересно, мне казалось ее NCrashed а не dpwiz писал
Alexander
мне стыдно
Aleksei (astynax)
Чёт сколько я не гуглил, не нашел Haskell-based аналогов скедулера общего назначения с пуллом воркеров, очередями с приоритетами, т.е. чтобы всё "как у больших"...
Aleksei (astynax)
У питона вон есть Celery. И куча примочек для неё типа админки с графиками и т.д.
Kirill
индусы из vacation labs что-то обещались заопенсорсить
Kirill
я так понимаю сделанное по мотивам рубишного чего-то, т.к. с рубёв они мигрировали
Kirill
из необщего есть варианты типа https://hackage.haskell.org/package/postgresql-simple-queue
Зигохистоморфный
начинается http://reasonmlhub.com/exploring-reasonml/
Aleksei (astynax)
я так понимаю сделанное по мотивам рубишного чего-то, т.к. с рубёв они мигрировали
Вот да, на питоне и рубях по пять-шесть популярных вариантов, а уж наколеночных поделий десятки
Aleksei (astynax)
А на хаскеле полторы либы для запуска IO в стиле Cron
Denis
у нас своя поделка есть
Denis
но она не гнется, поэтому никто никогда её не заопенсорсит
Aleksei (astynax)
наша поделка - убогая
Denis
да кто ж спорит
Aleksei (astynax)
Надо написать. Будет киллер-приложение!
Denis
почти как у рубистов!
Denis
Видимо никак?
макросы в редакторе уже предлагали?
Kirill
Да хотелось фичами языка обойтись
Denis
тут генериковые решения явно оверкилл
Denis
а вообще это похоже на один и тот же тип параметризованный функтором data Data f = Data { a :: f a, b :: f b, … }
Denis
но для раздербанивания опять же либо генерики, либо ручками все поля пройти(в редакторе макросами вхуж и готово)
Kirill
Да, но суть то именно в том что б эту структурку потраверсить
Kirill
Ладно, спасибо, буду копипастить
Denis
чтобы её траверсить, этот рекорд должен быть гетерогенным, HList или похожие
Denis
рекомендую копипастить
Kirill
HList foldable?
Kirill
(делать для этого так я не буду, просто в рамках общего развития)
Denis
нет, он не может быть Foldable, там в разных полях значения разных типов
Denis
Foldable так не работает
Denis
для него значения одного типа должны быть
Kirill
Ну может там маркер типа для каждой итерации передаётся
Denis
какой тип по твоему должен быть у этой операции?
Kirill
(Typeable a) => (a -> Dynamic -> b) -> HList -> b
Kirill
Или что-то такое
Kirill
Точнее не typeable
Kirill
А какой там тип для маркера
Denis
я без понятия что ты понимаешь под маркером
Kirill
То, что в Data.Dynamic
Denis
и как тебе рантайм выберет функцию для преобразования по “маркеру”, а в компайл-тайме убедится что у тебя такая есть?
Kirill
TypeRep, во
Kirill
в компайл тайме кажется никак
Cheese
Надо написать. Будет киллер-приложение!
напишут, когда кому-нибудь понадобится тебе уже понадобилось? вот ты и напиши
Aleksei (astynax)
понадобилось :)
Aleksei (astynax)
Придется писать
PsyDebug
А на хаскеле полторы либы для запуска IO в стиле Cron
этож норм вполне, почти как кварц в жаве.
Aleksei (astynax)
Норм. Если бы сопровождались и фичи имели.
Andrei
начинается http://reasonmlhub.com/exploring-reasonml/
для фронтенда Reason, имхо, сойдёт
Cheese
для фронтенда уже есть Хаскель