juan_gandhi: (VP)
[personal profile] juan_gandhi
http://community.haskell.org/~simonmar/papers/haxl-icfp14.pdf

Или у меня синдром Даннинга-Крюгера, или я не нашел ничего, чего бы не было у Патерсона и МакБрайда, а также поразительно похожие куски на слайды моего рассказа на Codecamp в 2012-го году. Хотя, конечно, у дураков и великих умов мысли сходятся; да и у меня там не было ничего такого, что бы не написали уже Патерсон с МакБрайдом.

Или я чего-то не понял.

Но у меня в парсерах нынче подобного кода пруд пруди.

  for {(name, sDob, membernumber, claimnumber) <-
        Result.zip(props @ Name, props @ Dob, props @ MemberId, props @ ClaimNr)
       dob <- parseDob(sDob)
       stuff <- buildStuff(name, dob, membernumber, claimnumber)
      } yield stuff

Date: 2014-12-02 03:04 pm (UTC)
From: [identity profile] mikkim08.livejournal.com
А где у Вас в этом коде аналог Fetch/Haxl ?

Date: 2014-12-02 08:58 pm (UTC)
From: [identity profile] mikkim08.livejournal.com
Посмотрел Ваш Result на гитхабе. Не нашел ни Result.zip, ни @.

Date: 2014-12-02 09:56 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
@ - это в Props. Result.zip я в выходные закину, соорудил его в воскресенье только.
(deleted comment)

Date: 2014-12-03 03:56 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Oh fuck. 10x

Date: 2014-12-02 05:05 pm (UTC)
From: [identity profile] maxim.livejournal.com
Я кстати когда это год назад читал вспоминал тебя и подумал еще что Ганди не хуже задвигает.
UPD. вроде не год, но такое ощущение что год прошел.
Edited Date: 2014-12-02 05:06 pm (UTC)

Date: 2014-12-02 08:23 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Я с тех пор перестроился, как видишь. По совету [livejournal.com profile] sassa_nf вместо тензорного произведения впендюрил "безобъектный" zip.

Date: 2014-12-03 03:42 am (UTC)
From: [identity profile] pechkinoff.livejournal.com
Не понимаю, чего от мордокниги народ тащится. Мне почему-то думается, что интерес к ним угаснет через какое-то время. Сайт для подростков.

Я вот только что закончил задачи по Poor Man’s Concurrency Monad на edX FP101. Не помню, когда еще написание одной строчки кода отнимало у меня столько времени, типа:

(Concurrent f) >>= g = Concurrent (\ c -> f (\a -> (unwrap(g a) c)))

Круть.

Date: 2014-12-03 12:56 pm (UTC)
From: [identity profile] andybil.livejournal.com
Это правда, что из-за того, что в принтере засохло сопло, не пропечаталась точка, ввели ошибочный текст программы и в результате произошёл несанкционированный запуск и Фаэтон был уничтожен?
Edited Date: 2014-12-03 12:56 pm (UTC)

Date: 2014-12-03 03:00 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
По-моему, данное утверждение является чушью по многим причинам.

Date: 2014-12-03 03:25 pm (UTC)
From: [identity profile] andybil.livejournal.com
Разве это утверждение? Это полуторастишие
Edited Date: 2014-12-03 07:11 pm (UTC)

Date: 2014-12-03 08:16 pm (UTC)
From: [identity profile] pechkinoff.livejournal.com
Нет, его Брюс Уиллис спас.

Возможно

Date: 2014-12-03 08:22 pm (UTC)
From: [identity profile] andybil.livejournal.com
А вот текстовые (грамматические) языки программирования ничего не спасёт

Date: 2014-12-06 01:40 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
а главное, не очень понятно, почему бы не использовать было pipes какие-нибудь.

Date: 2014-12-06 04:32 pm (UTC)
From: [identity profile] mikkim08.livejournal.com
О. А расскажите, что за pipes ?

Date: 2014-12-06 11:08 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
https://hackage.haskell.org/package/pipes-4.1.4/docs/Pipes-Core.html#t:Client

я вообще-то не посоветую, как там сделать параллелизм _правильно_, но мне кажется, fetch пишется thread-safely как Server, а в Client запросы делаем, комбинируя par. Потом соединяем: fetch +>> client

Клиентская часть тогда довольно гигиенично (а серверную они и так не показывают):
let req = request "http://whatever"
    req' = request "http://whatever.else"
in req `par` req' `pseq` do
  resp <- req
  resp' <- req'
  ...



Хотя, даже лучше. Есть же pipes-concurrency. Объяснили бы в статье, что так, мол, и так, pipes suck.
Edited Date: 2014-12-07 01:22 am (UTC)

Date: 2014-12-07 07:59 am (UTC)
From: [identity profile] mikkim08.livejournal.com
Спасибо. Я ничего не понял сейчас, но при случае посмотрю.

Date: 2014-12-07 10:03 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
ну там идея несложная. Там сложность в том, чтобы научиться правильно выгоду изымать - это ж совершенно новые горизонты.

Монада позволяет выстраивать цепочки вычислений:
  |
 _|_ 
|   |
`---'
  |
 _|_
|   |
`---'
  |


Но у нас зачастую будут какие-то вложенные конструкции, типа как вложенные циклы. Из-за этого логика обоих циклов выглядит разорванной. Pipes позволяет separation of concerns. Строишь независимые цепочки, а в нужных местах расставляешь await / yield для "горизонтального" общения между цепочками действий.
  |        |
 _|_      _|_
|   |<---|   |
`---'    `---'
  |        |
 _|_      _|_
|   |--->|   |
`---'    `---'
  |        |


Pipes предоставляет несколько разных способов соединять входы-выходы; все эти >~, ~>, >->, +>>,, >\\ - это просто разные способы комбинировать горизонтально; там и диаграммки нарисованы для этого, и по типам ясно, что к чему. В связи с тем, что комбинирование - это композиция, там получается и категорная семантика тоже.

А сдвиг парадигмы, собственно, мотивируется замечательным образом в одном из выпусков fprog - там про continuations рассказывалось, но мотивация годная: чтобы совместить, скажем, итератор по дереву и потребитель содержимого дерева, кого-то из них нужно "вывернуть наизнанку", из-за чего оба будут выглядеть уродски (а вот если ввести continuations, то по-божески). А с помощью Pipes итератор будет выглядеть так:

iter (Empty) = return ()
iter (Node x l r) = do
   yield x
   iter l
   iter r
(а то и вообще iter = traverse yield)

а потребитель - так:
consume = do
  ...
  x <- await


Склеиваем с помощью Pipes: (iter tree >~ consume) - всё! Ни итератор не заморачивается, как именно кто-то хочет потребить содержимое дерева, ни потребитель не заморачивается, как итератор устроен; оба пишутся "в лоб" цельной цепочкой действий.
Edited Date: 2014-12-07 12:23 pm (UTC)

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

May 2025

S M T W T F S
    1 2 3
456 7 8 9 10
11 121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 15th, 2025 06:31 pm
Powered by Dreamwidth Studios