Aleksei (astynax)
Как получить некотрую определённую (а не локальную) TimeZone (чтобы потом делать UTCTime -> ZonedTime)?
Dmitry
#haskell #postgresql #postgresql-simple #wtf Неведомым образом вот это: https://gist.github.com/voidlizard/139dfef9db7c60af147694a85b27cc6d работает в несколько раз быстрее, чем вот это: https://gist.github.com/voidlizard/437e916a0f46be115a6d9529011ec688 понять это нельзя, поэтому надо запомнить
Dmitry
Наш уютненький, кстати, просто люто стал распараллеливать вычисления. Несколько лет назад -threaded и какой-нибудь using parList только пессимизировало программу. А теперь всё реально ускоряется пропорционально потокам.
Misha
экхм... а в логе постгреса есть запрос, который реально выполняется?
Dmitry
да фиг его знает. я не думаю, что тут дело в постгресе, хотя легко поставить эксперимент
Dmitry
ну т.е дело в заливке внутрь постгреса большого массива
Dmitry
снаружи.
Misha
скорее всего в драйвере конечно, но очень интересно чего он там намудрил
Dmitry
postgresql-simple, конечно, шляпа.
Dmitry
советуют тут hasql - кто-то может что-то про него сказать?
Aleksei (astynax)
hasql сильно opinionated
Aleksei (astynax)
Запросы строятся на стрелках вместо монадки, например
Dmitry
ой
Aleksei (astynax)
Это мешает, например, поиметь монадический код с логированием внутри кода, строящего сложный запрос
Aleksei (astynax)
Но за счёт бинарного протокола обмена с psql иногда бывает профит - если запросы большие
Anonymous
Стоп. Оно же instance ArrowApply. Можно завернуть стрелку в ArrowMonad, пользоваться инстансом ArrowApply a => Monad (ArrowMonad a) и пользоваться как монадой, я думаю.
Aleksei (astynax)
Хмм. Я давненько смотрел, признаю. Тогда мне не удалось сходу такое провернуть
Anonymous
В документации к ArrowApply пишут, что > The ArrowApply class is equivalent to Monad: any monad gives rise to a Kleisli arrow, and any instance of ArrowApply defines a monad.
Anonymous
https://hackage.haskell.org/package/base-4.9.0.0/docs/Control-Arrow.html#t:ArrowMonad
Зигохистоморфный
ArrowApply это же почти как $ только для разных видов
Aleksei (astynax)
Ну ок, так я втащу Query в монадический код. Но надо то монадку (скажем, логгера или ридера) втащить внутрь стрелочного do, в котором строится запрос
Aleksei (astynax)
Внутри монадического кода можно и просто запрос выполнить - получится IO.
Aleksei (astynax)
Чуть-чуть проще с транзакциями - там Monad есть.
Aleksei (astynax)
Может, конечно, это идея такая - строить Query отдельно от монадического кода...
Dmitry
Ну идея в принципе норм
Anonymous
Логгер-то можно и к (ArrowMonad (Query a)) прицепить и lift-ом всё, кроме логирования, поднять. Тем более, что там только 1 метод - statement.
Leonid 🦇
я уже запутался в чатиках
Anonymous
Тут главное, что люди всё те же
Max
А какой еще чатег есть?
Alignant
Как понять монады?
Vasiliy
писать код и не морочить себе голову
Anonymous
Как понять монады?
http://dev.stephendiehl.com/hask/#eightfold-path-to-monad-satori
Max
А чего их понимать? Монада - это просто цепочка вычислений с состоянием. ))
Зигохистоморфный
или способ комбинировать сайд эффекты
Max
В отличии от аппликативных функторов, которые без состояния
Max
(спрятался)
Влод
Как понять монады?
если был матан на первом курсе, то можешь вспомнить что там были всякие группы/полугруппы/решётки/моноиды. и лектор такой сначала рассказывал что такое решётка, а потом показывал что числа образуют решётку и все такие ура, мы только что выучили новое понятие и тут же обнаружили, что привычные нам числа принадлежат этому понятию. свойств новых это не даёт, просто выучили и двигаемся дальше по курсу
Max
У меня не было матана...
Влод
с монадами то же самое. есть монады (несколько операций и несколько законов) есть IO - те побочные эффекты которыми всю жизнь пользовался и IO вписывается в понятие монады
Влод
и + ещё специальный синтаксис введён, так что другие монады тоже имеет свой прикол использовать
Max
http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
Влод
Чет у вас какой-то крутой был первый курс. У меня были матрицы, интегралы, пределы и ещё какая-то хрень
матрицы из линала и в линале рассказывают все эти понятия. с решёткой я на самом деле немного не то сказал, но лично в моём курсе она мне больше всего понравилась тем, что понятие вводится и больше не переиспользуются. ну потом ещё в дискретке вроде встретилось
Зигохистоморфный
ну вроде кольца группы и полугруппы с полями я помню
Max
Пора открывать клуб онанимных не-математиков ))
Anonymous
А чего их понимать? Монада - это просто цепочка вычислений с состоянием. ))
не слушайте. про "цепочку вычислений" и про состояние написано тут https://wiki.haskell.org/What_a_Monad_is_not
Igor
Как понять монады?
Советую посмотреть https://youtu.be/PlFgKV0ZXoE (но лучше все видео с начала)
Anonymous
http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
очередной "monad tutorial" с картинками и аналогиями который только запутывает
Anonymous
Выше где-то упоминали Applicative. Вот да, надо про него сначала почитать.
Anonymous
аналогий и картинок быть не может, потому что монады это нечто очень абстрактное
Влод
Пора открывать клуб онанимных не-математиков ))
кстати думаю норм челы видят местный уровень и ливают, остаются люди с поверхностным суждением вроде меня и говорят свободно о всём подряд
Anonymous
ещё раз, вот самый честный ответ на вопрос: http://dev.stephendiehl.com/hask/#eightfold-path-to-monad-satori без выебонов, картинок, авторского тщеславия
Зигохистоморфный
лучше понять как юзать ту или иную монаду, а на общем случае не понимать)
Leonid 🦇
композиция функций (.) :: (b - > c) -> (a -> b) -> a -> c композиция монадных функций (<=<) :: (b -> m c) -> (a -> m b) -> a -> m c вот и все монады
Igor
Как понять монады?
Ну и в догонку (но опять таки с конца будет не понятно) https://youtu.be/gHiyzctYqZ0
Max
Не, ребят, я понимаю, что Монада - это нечто абстрактное, вон Дима, помнится, давал определение через класс типов. И понятно, что сводить в вычислению с состоянием - это некошерное обобщение. Но тут мне кажется от частного к общему топать проще, не?
Max
Понятно. Надо все-таки дослушать про типизированные лямбды и прочесть Пирса.
Leonid 🦇
если объясняя монады в хаскеле вам начинают втирать про ТК, сразу говорите "ой, всё" и меняйте тему
Max
А если попросят "обосновать отказ"?
Влод
притвориться спящим
Зигохистоморфный
притворись гусенеценей, а она притворится веткой и никто не отличит ее от ветки на земле
Leonid 🦇
тогда просишь пояснить за шмот и начинаешь мерзенько гнусавить
Vladislav
найди мне в Proxy состояние
Vladislav
а инстанс монады-то есть
Max
С вертушки в щи можно? Или просто моноклем побить?
Vladislav
а?
Влод
поэтому лучше говорить "монада позволяет выразить..." вместо "монада – это..."
Vladislav
все можно, а Proxy все равно монада без состояния
Vladislav
Так монады много чего позволяют выразить, нельзя понять их по 1-2 примерам
Vladislav
Это как сказать: смотри в зеркало, вот нос — он один, а вот глаза — их два. Все, ты считай понял calculus
Влод
ну человек утверждает что апликативы не позваляют
Vladislav
Так позволяют, State s это аппликатив
Max
Ну вот, опять магия включилась
Max
За это вас, хаскелистов, и не любят ))
Vladislav
И можно даже stateful штуки сделать с ним, например put 10 *> modify (*2) *> get
Max
Быдлее надо быть.