
Kirill
12.10.2017
19:11:47
на что недавно нарвался дак https://github.com/bitemyapp/esqueleto/issues/49 - промахнёшься с (обратным) порядком on/join и ошибка придёт только из БД, даже не исключение от Esqueleto
а так основная причина того, что пользуем persistent/esqueleto это MySQL, нормальные люди пользуют постгре и у них больше пространство для манёвра :)

Julian
12.10.2017
19:18:18
А что постгресс дает, все равно же нужен DSL. Или для постгресса не нужен?)

Kirill
12.10.2017
19:20:32
дак говорю - больше пространство

Google

Kirill
12.10.2017
19:20:55
ну с ходу могу назвать opaleye и hasql
тока pg
вроде ещё было что-то под pg и юзабельное
но копаем мускул, так что по теме pg я не советчик

Julian
12.10.2017
19:23:42
Я довольно плохо ориентируюсь в экосистеме, поэтому opaleye - это открытие для меня, спасибо)

Диёр
12.10.2017
19:27:09
На хаскелл вообще можно без выкрутасов просто кодить, не пытаясь каждый раз описывать программу как математическую модель?

Yurii
12.10.2017
19:31:15

A64m
12.10.2017
19:35:05
Можно, но зачем?

Alexander
12.10.2017
19:35:31
@raventid я был
esqueleto расширяет список запросов, которые можно сделать persistent-ом до минимально разумного уровня
что вообще можно смотреть
но я вообще не люблю type safe выкрутасы поверх sql и orm
обычно это не работает

Google

Kirill
12.10.2017
19:42:41
а я наоборот перекатал несколько десятков запросов с mysql-simple на persistent/esqueleto несколько недель назад
только вот порядок джойнов расстраивает а так хоть какой-то относительно безопасный код реюз когда общие куски запросов есть
но осталась несколько ещё многоэтажных запросов которые не осилил :)

Andrey
12.10.2017
19:53:14

IC
12.10.2017
21:28:09
Лучше для какой задачи?

Alexander
12.10.2017
21:53:32
Или mysql не оптимайзит такое?

Mikhail
12.10.2017
22:04:45
Или mysql не оптимайзит такое?
Я могу ошибаться, но с джойнами движки обычно делают так. Допустим у тебя есть A join B join C join D
1. Выполняется только то, что запросил: джойнить A и C никто не будет
2. Приоритет всегда расставляется так, что результат — таблица (то есть (A j B) j (C j D) не будет)
если мне кто-нибудь скажет, что это не так, будет здорово. Могу приложить линк на лекции из уни, но в интернетах пруф пока не нашел (ищу)

Kirill
12.10.2017
22:07:02
да кодогенератор не может порядок проверять
в обычном сикеле у тебя по тексту идут JOIN а за ним ON
в esqueleto же они "оторваны" друг для друга, вроде как для композиционности

Mikhail
12.10.2017
22:08:20
http://www.benjaminnevarez.com/2010/06/optimizing-join-orders/
Вот тут пишут что bushy не пользуются, потому что слишком много вариантов реордеринга

Kirill
12.10.2017
22:08:40
в итоге можешь делать JOIN для A и B, а в ON у тебя будут C и D
в тикете там всё вроде указано и линка на хаддоки, где ещё Фелипе задокументил косяк

Alexander
12.10.2017
22:27:36

Mikhail
12.10.2017
22:28:02

Alexander
12.10.2017
22:28:08
bushy супердорого, да
в смысле итераций? если таблиц немного джойнится, то можно прикинуть cost для всех вариантов
если много (типа 10+), то всякие эвристики нужны уже

Google

Alexander
12.10.2017
22:31:07

Mikhail
12.10.2017
22:32:24

Alexander
12.10.2017
22:41:44
ну не, возможно твое замечание и справедливо

Mikhail
12.10.2017
22:42:29
Я сижу и туплю и не могу понять какая там асимптотика :/

Alexander
12.10.2017
22:43:29
но даже если перебираются не все возможные варианты, то большое количество
это отвечая на твой первый вопрос про то, будет ли оптимайзер джойнить А и С - вполне себе будет

Vladimir
13.10.2017
04:58:37
Всем привет. Кто может посоветовать либу websocket для haskell?

Pineapple
13.10.2017
05:00:02
websockets?

Vladimir
13.10.2017
05:21:32
Так и называеться?

Aleksey
13.10.2017
05:22:33
https://hackage.haskell.org/package/websockets
https://hackage.haskell.org/package/wai-websockets

Vladimir
13.10.2017
05:27:09
А то вроде немного погиграться рикрутил web socket вместо очереди. Хочу просто на другом языкке сервачок небольшой написать.

Aleksey
13.10.2017
05:35:50
Зечем websocket вместо очереди, если можно просто socket взять?

Vladimir
13.10.2017
05:38:41
Ну можно. Но тогда можно быдет быстро веб интрерфейс прикрутить.
И в java spring web socket в 20 строчек поднимаеться с маппингом и прочими плюшками. А для server socket нормальной поддержки нет.
Хотя если нагрузка начнет расти, то возможно пидеться смотреть в стророну netty:)

Alexander
13.10.2017
08:02:17
@volhovm у вас в universum случаем нету join . atomically . asum а если есть, то как обозвали?
а то у нас достаточно часто встречается такой паттерн, а как обозвать непонятно

Dmitry
13.10.2017
08:24:36
@qnikst Такого случайно нет. atomically — это из STM? Не знаю, встречается ли у нас часто такой паттерн...

Alexander
13.10.2017
08:24:49
да

Google

Alexander
13.10.2017
08:25:05
это когда есть stm, который возвращает какой-нить IO, который выполнить
да = из STM

Index
13.10.2017
08:26:04
А что делает asum в данном случае?

Alexander
13.10.2017
08:26:40
выбирает из транзакций
asum [stmAction1, stmAction2, ..]
оно работает как stmAction1 orElse stmAction2 orElse retry
можно конечно asum не втаскивать и только join atomically оставить

Kirill
13.10.2017
08:29:34
@qnikst а что есть universum в данном случае?

Alexander
13.10.2017
08:29:54
очередное prelude/base done right
(это не пренебрежительный комментарий был если что)

A64m
13.10.2017
08:38:22
> Reimagined approach for Foldable type hierarchy. Forbids usages of length function and similar over Maybe and other potentially unsafe data types. It was proposed to use -XTypeApplication for such cases. But this approach is not robust enough because programmers are human and can easily forget to do this.
ясно понятно
class Container t => NontrivialContainer t

Alexander
13.10.2017
08:40:24
обозвал runSTM и runSTMs

Kirill
13.10.2017
09:57:42
кстати, никто не в курсе, чего lts-стакана под 8.2 так всё и нету?

Aleksey
13.10.2017
09:58:49
Там баги :) Мы попробовали на Nightly с 8.2.1 пересесть, теперь вот расхлёбываем - пишем багрепорты, вот это всё
Баги компилера

A64m
13.10.2017
09:59:45
что, больше, чем обычно в .1 ?

Aleksey
13.10.2017
10:00:09
Достаточно одного, но блокирующего

A64m
13.10.2017
10:02:01
ну т.е. как обычно

Alexander
13.10.2017
10:02:44
у нас пока что попалось - неблокирующее

Google

A64m
13.10.2017
10:05:47
@astynax а что там такого страшного в этот раз? В .2 RC1 еще есть?
сам-то я и не пробовал еще на 8.2 переходить

Dmitry
13.10.2017
10:07:03
Shadowed dependencies на пустом месте ещё выпадают?

Alexander
13.10.2017
10:07:14
мы в RecordWildcards на что-то наткнулись
или чем-то близком

A64m
13.10.2017
10:08:10
RecordWildcards урезали же

Aleksey
13.10.2017
10:08:54

Denis
13.10.2017
10:09:52

A64m
13.10.2017
10:10:16
захват на топлевеле точно урезали, может еще что
https://ghc.haskell.org/trac/ghc/ticket/14347

Denis
13.10.2017
10:14:56
ну я это не юзал, больше в функциях, чтобы не париться с PM

Leonid
13.10.2017
10:37:39
I don't think anyone is using record wildcards in this bizarre way, so I don't expect any fallout.

A64m
13.10.2017
10:42:06
ЕМНИП Леннарт говорил, что использование для энкодинга модулей у этой фичи штатное
но то, что эту фичу так и не стали в таком качестве использовать - это факт, конечно
хотя ее переодически "открывают", Гонзалес сколько-то лет назад, а недавно вот и SPJ
в парадигме "первокалассный модуль" это поведение вовсе не странное, непервоклассные модули тоже позволяют реэкспортить топлевел-значения.

Yuriy
13.10.2017
16:06:00
Check out @crazy_fizruk’s Tweet: https://twitter.com/crazy_fizruk/status/918868614257762304?s=09
Check out @skillsmatter’s Tweet: https://twitter.com/skillsmatter/status/918833954718912512?s=09

Denis
13.10.2017
16:06:37
Алкоголики! Тунеядцы!