@haskellru

Страница 820 из 1551
kana
07.02.2018
17:09:30
вот Rec' f и Rec'' f = forall r. Rec f r возможно можно свести, но не факт

да, PatternSynonyms интересный, но чет странно пахнет

Denis
07.02.2018
17:32:21
я заметил одно, часто подход с CPS убирает квадратичную сложность

все потому что Church рулит)

Google
Anatolii
07.02.2018
17:37:46
все потому что Church рулит)
а где про черч энкодинг почитать можно?

Denis
07.02.2018
17:39:05
это не тот черч энкодинг что на слуху

Anatolii
07.02.2018
17:39:26
а можно поробнее?

Гонзалез где-то писал что черч энкодинг прямо обязательно понять. Но где почтитаь не сказал

какую-то ссылочку может киньте

или название пейпера может

Denis
07.02.2018
17:40:44
http://programmable.computer/posts/church_encoding.html я подозреваю что гонзалез про лямбда-термы мог писать черч-энкоднутые

kana
07.02.2018
17:40:57
в моем представлении черч-энкодинг это adt на лямбдах (а для работы со значенем свертки), а мне тут на функторах что-то кидали

Denis
07.02.2018
17:41:11
так ведь все можно заэнкодить в черче

kana
07.02.2018
17:41:15
о, да, то что выше

типа -- adt data Tree a = Leaf a | Node (Tree a) a (Tree a) -- church type Tree a = forall c. (a -> c) -> (c -> a -> c -> c) -> c leaf :: a -> Tree a leaf := \x foldLeaf foldNode -> foldLeaf x node :: Tree a -> a -> Tree a -> Tree a node := \l x r foldLeaf foldNode -> foldNode (l foldLeaf foldNode) x (r foldLeaf foldNode) foldTree :: (a -> c) -> (c -> a -> c -> c) -> Tree a -> c foldTree foldLeaf foldNode x = x foldLeaf foldNode

Denis
07.02.2018
17:44:15
kana
07.02.2018
17:44:39
все, что я выше написал, я и считал черч-энкодингом

Google
Denis
07.02.2018
17:45:21
newtype TreeC a = TreeC { runTree :: forall r. r -> (r -> a -> r -> r) -> r } deriving Functor

вот дерево в черче

kana
07.02.2018
17:48:31
если сделать Leaf со значнием, то получится то же, что и у меня

kana
07.02.2018
17:53:22
кстати, отсюда у меня давно уже вывод идет, что a) у foldов всегда редьюсер должен быть a -> b -> b, как у foldr b) начальное значение должно идти перед редьюсером, так как [] объявлен ранее :

Alexander
07.02.2018
17:58:51
растоканал откуда начинать читать ? СС @catamorphism

Denis
07.02.2018
17:59:46
@qnikst да там одна фраза была по большому счету

Alexander
07.02.2018
18:00:16
ну тогда не найти уже

Denis
07.02.2018
18:11:08
хорошо что так хайлайты не работают

Alexander
07.02.2018
18:23:54
сильно повезло

Kirill
07.02.2018
18:25:36
Подскажите, чем из xml-я (строка) по xpath-у/набору фильтров вытащить значение ноды?

Denis
07.02.2018
18:28:49
hxt самое xpath-оподобное было. Мы dom-parser/xml-conduit юзаем.

Yuriy
07.02.2018
18:29:54
у меня xml-lens в петпроекте

Kirill
07.02.2018
18:30:29
можно примерчики?)

Yuriy
07.02.2018
18:31:32
notifaika/RSS.hs at master · cblp/notifaika https://github.com/cblp/notifaika/blob/master/src/Notifaika/RSS.hs

Kirill
07.02.2018
18:31:51
спасибо)

Yuriy
07.02.2018
18:35:35
правда, линзы — это мягко говоря, не для новичков

Google
Yuriy
07.02.2018
18:35:53
особенно всякие plate в этом xml-lens

Denis
07.02.2018
18:38:53
я вот и думаю чего ты человека на три линзы послал

Yuriy
07.02.2018
18:45:31
я не сразу увидел, что человек из новичков пришёл

Kirill
07.02.2018
19:05:02
Да линзы я худо бедно осилил

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
08.02.2018
00:45:09
изучаю хаскель, решил немного поразбираться с cloud haskell и реализовать bully algoritm (https://en.wikipedia.org/wiki/Bully_algorithm)

у меня самая первая задача – при старте нового узла обнаружить все остальные узлы я так понял, что мне нужен 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 ()

ладно, начну-ка я сначала с их примера с master/slave, завтра

Alexander
08.02.2018
01:04:02
IOHK task detected

d-h-simplelocalnet / d-p-p2p

проверь что не на ipv6 интерфейс, если патч пришлешь то спасибо

и.к. network-transport-tcp его не умеют

Vasiliy
08.02.2018
01:09:16
спасибо!

Alexander
08.02.2018
01:09:46
лучше сразу понять как работает simplelocalnet и забить на мастер слейв

я не помню условий но simplelocalnet работает в локальной сети только, или мультикаст сети

и.к. поиск нод на основе мульткаста

но адрес вроде фиксирован

+ роутеры и провайдеры могут резать мультикаст

если там требуется не только локальная сеть, то надо -p2p

но надо знать адрес одной ноды хотя бы чтобы инициализировать сеть

Google
Alexander
08.02.2018
01:12:54
автор либы где-то вокруг есть я там апи не помню

Vasiliy
08.02.2018
01:13:37
+ роутеры и провайдеры могут резать мультикаст
возможно в этом проблема лучше сразу делать p2p думаю

Alexander
08.02.2018
01:14:02
у тебя ноды в разных сетях?

Vasiliy
08.02.2018
01:14:22
про это не сказано в условиях задачи, думаю, можно придраться)

https://bitbucket.org/dpwiz/distributed-process-p2p/ вот эта

Alexander
08.02.2018
01:14:43
на хакадже смотри

Vasiliy
08.02.2018
01:15:01
ну да, это оно https://hackage.haskell.org/package/distributed-process-p2p, завтра попробую, спасибо

Alexander
08.02.2018
01:15:35
ага

интересно, мне казалось ее NCrashed а не dpwiz писал

мне стыдно

Aleksey
08.02.2018
06:49:43
Чёт сколько я не гуглил, не нашел Haskell-based аналогов скедулера общего назначения с пуллом воркеров, очередями с приоритетами, т.е. чтобы всё "как у больших"...

У питона вон есть Celery. И куча примочек для неё типа админки с графиками и т.д.

Kirill
08.02.2018
07:06:58
индусы из vacation labs что-то обещались заопенсорсить

я так понимаю сделанное по мотивам рубишного чего-то, т.к. с рубёв они мигрировали

из необщего есть варианты типа https://hackage.haskell.org/package/postgresql-simple-queue

Denis
08.02.2018
07:21:25
начинается http://reasonmlhub.com/exploring-reasonml/

Aleksey
08.02.2018
07:41:44
я так понимаю сделанное по мотивам рубишного чего-то, т.к. с рубёв они мигрировали
Вот да, на питоне и рубях по пять-шесть популярных вариантов, а уж наколеночных поделий десятки

А на хаскеле полторы либы для запуска IO в стиле Cron

Denis
08.02.2018
07:42:29
у нас своя поделка есть

но она не гнется, поэтому никто никогда её не заопенсорсит

Google
Aleksey
08.02.2018
07:42:54
наша поделка - убогая

Denis
08.02.2018
07:43:13
да кто ж спорит

Aleksey
08.02.2018
07:43:50
Надо написать. Будет киллер-приложение!

Denis
08.02.2018
07:44:07
почти как у рубистов!

Denis
08.02.2018
07:44:47
Видимо никак?
макросы в редакторе уже предлагали?

Kirill
08.02.2018
07:45:20
Да хотелось фичами языка обойтись

Denis
08.02.2018
07:45:39
тут генериковые решения явно оверкилл

а вообще это похоже на один и тот же тип параметризованный функтором data Data f = Data { a :: f a, b :: f b, … }

но для раздербанивания опять же либо генерики, либо ручками все поля пройти(в редакторе макросами вхуж и готово)

Kirill
08.02.2018
07:47:47
Да, но суть то именно в том что б эту структурку потраверсить

Ладно, спасибо, буду копипастить

Denis
08.02.2018
07:48:27
чтобы её траверсить, этот рекорд должен быть гетерогенным, HList или похожие

рекомендую копипастить

Kirill
08.02.2018
07:49:13
HList foldable?

(делать для этого так я не буду, просто в рамках общего развития)

Denis
08.02.2018
07:49:49
нет, он не может быть Foldable, там в разных полях значения разных типов

Foldable так не работает

для него значения одного типа должны быть

Kirill
08.02.2018
07:50:27
Ну может там маркер типа для каждой итерации передаётся

Denis
08.02.2018
07:51:03
какой тип по твоему должен быть у этой операции?

Страница 820 из 1551