
Dmitry
19.07.2017
10:27:54
кто нибудь умеет в postgresql-simple array-и биндить?

Aleksey
19.07.2017
11:16:14
Как получить некотрую определённую (а не локальную) TimeZone (чтобы потом делать UTCTime -> ZonedTime)?

Dmitry
19.07.2017
15:23:16
#haskell #postgresql #postgresql-simple #wtf Неведомым образом вот это:
https://gist.github.com/voidlizard/139dfef9db7c60af147694a85b27cc6d
работает в несколько раз быстрее, чем вот это:
https://gist.github.com/voidlizard/437e916a0f46be115a6d9529011ec688
понять это нельзя, поэтому надо запомнить
Наш уютненький, кстати, просто люто стал распараллеливать вычисления. Несколько лет назад -threaded и какой-нибудь
using parList
только пессимизировало программу. А теперь всё реально ускоряется пропорционально потокам.

Google

Misha
19.07.2017
15:32:29
экхм... а в логе постгреса есть запрос, который реально выполняется?

Dmitry
19.07.2017
15:32:50
да фиг его знает. я не думаю, что тут дело в постгресе, хотя легко поставить эксперимент
ну т.е дело в заливке внутрь постгреса большого массива
снаружи.

Misha
19.07.2017
15:33:21
скорее всего в драйвере конечно, но очень интересно чего он там намудрил

Dmitry
19.07.2017
15:33:36
postgresql-simple, конечно, шляпа.
советуют тут hasql - кто-то может что-то про него сказать?

Aleksey
19.07.2017
15:40:03
hasql сильно opinionated
Запросы строятся на стрелках вместо монадки, например

Dmitry
19.07.2017
15:40:26
ой

Aleksey
19.07.2017
15:41:07
Это мешает, например, поиметь монадический код с логированием внутри кода, строящего сложный запрос
Но за счёт бинарного протокола обмена с psql иногда бывает профит - если запросы большие

kir
19.07.2017
15:46:38
Стоп. Оно же instance ArrowApply. Можно завернуть стрелку в ArrowMonad, пользоваться инстансом ArrowApply a => Monad (ArrowMonad a) и пользоваться как монадой, я думаю.

Google

Aleksey
19.07.2017
15:47:29
Хмм. Я давненько смотрел, признаю. Тогда мне не удалось сходу такое провернуть

kir
19.07.2017
15:49:27
В документации к ArrowApply пишут, что
> The ArrowApply class is equivalent to Monad: any monad gives rise to a Kleisli arrow, and any instance of ArrowApply defines a monad.
https://hackage.haskell.org/package/base-4.9.0.0/docs/Control-Arrow.html#t:ArrowMonad

Denis
19.07.2017
15:50:54
ArrowApply это же почти как $ только для разных видов

Aleksey
19.07.2017
16:06:26
Ну ок, так я втащу Query в монадический код. Но надо то монадку (скажем, логгера или ридера) втащить внутрь стрелочного do, в котором строится запрос
Внутри монадического кода можно и просто запрос выполнить - получится IO.
Чуть-чуть проще с транзакциями - там Monad есть.
Может, конечно, это идея такая - строить Query отдельно от монадического кода...

Dmitry
19.07.2017
16:24:34
Ну идея в принципе норм

kir
19.07.2017
16:44:05
Логгер-то можно и к (ArrowMonad (Query a)) прицепить и lift-ом всё, кроме логирования, поднять. Тем более, что там только 1 метод - statement.

Leonid
19.07.2017
17:16:45
я уже запутался в чатиках

kir
19.07.2017
17:22:10
Тут главное, что люди всё те же

Max
19.07.2017
17:31:05
А какой еще чатег есть?

Eugene
19.07.2017
17:39:26
Как понять монады?

Vasiliy
19.07.2017
17:41:10
писать код и не морочить себе голову

Vladimir
19.07.2017
17:41:25

Max
19.07.2017
17:43:47
А чего их понимать? Монада - это просто цепочка вычислений с состоянием. ))

Denis
19.07.2017
17:44:13
или способ комбинировать сайд эффекты

Max
19.07.2017
17:44:17
В отличии от аппликативных функторов, которые без состояния
(спрятался)

Google

? animufag ?
19.07.2017
17:45:33
Как понять монады?
если был матан на первом курсе, то можешь вспомнить что там были всякие группы/полугруппы/решётки/моноиды. и лектор такой сначала рассказывал что такое решётка, а потом показывал что числа образуют решётку и все такие ура, мы только что выучили новое понятие и тут же обнаружили, что привычные нам числа принадлежат этому понятию. свойств новых это не даёт, просто выучили и двигаемся дальше по курсу

Eugene
19.07.2017
17:46:14

Max
19.07.2017
17:46:47
У меня не было матана...

? animufag ?
19.07.2017
17:47:12
с монадами то же самое.
есть монады (несколько операций и несколько законов)
есть IO - те побочные эффекты которыми всю жизнь пользовался
и IO вписывается в понятие монады
и + ещё специальный синтаксис введён, так что другие монады тоже имеет свой прикол использовать

Max
19.07.2017
17:48:55
http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html

? animufag ?
19.07.2017
17:49:48

Denis
19.07.2017
17:50:16
ну вроде кольца группы и полугруппы с полями я помню

Max
19.07.2017
17:50:36
Пора открывать клуб онанимных не-математиков ))

Vladimir
19.07.2017
17:51:20

Igor
19.07.2017
17:51:54
Как понять монады?
Советую посмотреть
https://youtu.be/PlFgKV0ZXoE (но лучше все видео с начала)

Vladimir
19.07.2017
17:51:58

Тёма
19.07.2017
17:52:08
Выше где-то упоминали Applicative. Вот да, надо про него сначала почитать.

Vladimir
19.07.2017
17:52:39
аналогий и картинок быть не может, потому что монады это нечто очень абстрактное

? animufag ?
19.07.2017
17:52:54

Тёма
19.07.2017
17:53:10

Vladimir
19.07.2017
17:53:23
ещё раз, вот самый честный ответ на вопрос: http://dev.stephendiehl.com/hask/#eightfold-path-to-monad-satori без выебонов, картинок, авторского тщеславия

Denis
19.07.2017
17:53:50
лучше понять как юзать ту или иную монаду, а на общем случае не понимать)

Leonid
19.07.2017
17:54:54
композиция функций (.) :: (b - > c) -> (a -> b) -> a -> c
композиция монадных функций (<=<) :: (b -> m c) -> (a -> m b) -> a -> m c
вот и все монады

Igor
19.07.2017
17:55:29
Как понять монады?
Ну и в догонку (но опять таки с конца будет не понятно)
https://youtu.be/gHiyzctYqZ0

Google

Max
19.07.2017
17:56:02
Не, ребят, я понимаю, что Монада - это нечто абстрактное, вон Дима, помнится, давал определение через класс типов. И понятно, что сводить в вычислению с состоянием - это некошерное обобщение.
Но тут мне кажется от частного к общему топать проще, не?

Denis
19.07.2017
17:56:20

Max
19.07.2017
17:57:59
Понятно. Надо все-таки дослушать про типизированные лямбды и прочесть Пирса.

Leonid
19.07.2017
17:58:14
если объясняя монады в хаскеле вам начинают втирать про ТК, сразу говорите "ой, всё" и меняйте тему

Max
19.07.2017
17:59:17
А если попросят "обосновать отказ"?

? animufag ?
19.07.2017
18:00:52
притвориться спящим

Denis
19.07.2017
18:01:32
притворись гусенеценей, а она притворится веткой и никто не отличит ее от ветки на земле

Index
19.07.2017
18:02:24

Admin
ERROR: S client not available

Leonid
19.07.2017
18:02:41
тогда просишь пояснить за шмот и начинаешь мерзенько гнусавить

Max
19.07.2017
18:03:03

Index
19.07.2017
18:03:20
найди мне в Proxy состояние
а инстанс монады-то есть

Max
19.07.2017
18:03:37
С вертушки в щи можно? Или просто моноклем побить?

Index
19.07.2017
18:03:50
а?

? animufag ?
19.07.2017
18:04:06
поэтому лучше говорить "монада позволяет выразить..." вместо "монада – это..."

Index
19.07.2017
18:04:07
все можно, а Proxy все равно монада без состояния
Так монады много чего позволяют выразить, нельзя понять их по 1-2 примерам
Это как сказать: смотри в зеркало, вот нос — он один, а вот глаза — их два. Все, ты считай понял calculus

? animufag ?
19.07.2017
18:05:22
ну человек утверждает что апликативы не позваляют

Google

Index
19.07.2017
18:05:40
Так позволяют, State s это аппликатив

Max
19.07.2017
18:05:42
Ну вот, опять магия включилась
За это вас, хаскелистов, и не любят ))

Index
19.07.2017
18:06:14
И можно даже stateful штуки сделать с ним, например put 10 *> modify (*2) *> get

Max
19.07.2017
18:06:17
Быдлее надо быть.

Index
19.07.2017
18:07:19
Да кем угодно можно быть, а монады от этого не стали "вычислениями с состоянием"
Т.е. я понимаю, что у тебя там что-то в голове творится и ты что-то понимаешь про вычисления, но это не монады.
И людей в заблуждение лучше не вводить

Max
19.07.2017
18:08:20
"Хер знает, что такое моднады на самом деле, а в нашем богоугодном хаскеле мы считаем их типами с определенным интерфейсом"
А искренне заблуждаться можно?
Или сразу к оскорблениям перейдем? ))

Index
19.07.2017
18:09:35
Заблуждения на пустом месте не возникают, вот монада — это моноид в категории эндофункторов, а остальные определения — посредственные аппроксимации.

Max
19.07.2017
18:09:51
Вот
Стоп-игра
Начинаем декомпозировать
Что такое эндофунктор?

Index
19.07.2017
18:10:58
Это функтор из некоторой категории в себя

Max
19.07.2017
18:11:50
Что такое функтор?

Denis
19.07.2017
18:12:12
это морфизм между 2категориями

Max
19.07.2017
18:12:31
Ага

Index
19.07.2017
18:12:33
Это сопоставление одной категории другой. Объекты в объекты, морфизмы в морфизмы, композицию в композицию.