
Alexander
19.05.2018
13:23:01
https://hackage.haskell.org/package/union
этот пакет

Антон
19.05.2018
13:23:28

Alexander
19.05.2018
13:23:55
но это не совсем сабтайпинг, сабтайпинг по структуре это все же винил и товарищи

Google

Alexander
19.05.2018
13:24:14
я вообще не осилил нормально что-либо с ним писать
нужно 2 мозга иметь

Denis
19.05.2018
13:24:48
https://github.com/target/row-types/

Антон
19.05.2018
13:25:40

Alexander
19.05.2018
13:25:59
а ещё гист от клапауций есть (на имплиситах)

Антон
19.05.2018
13:29:23

Alexander
19.05.2018
13:30:52
необновленные доки?
u - кайнд
as :: [u]
universe тут в этом смысле

Yura
19.05.2018
14:04:57
кстати вопрос - чем чревато, что nix-build собирается с одной версией cabal а в nix-shell запускается с другой?
не снесет ли от этого крышу ghc-mod или еще чему-то похожему?

Google

IC
19.05.2018
14:53:02

Denis
19.05.2018
14:53:44
хаскелю бы Variant/VariantF как в пурсе
ну и рекорды как в пурсе)

Антон
19.05.2018
14:58:41

Denis
19.05.2018
14:59:07

Oleg
19.05.2018
14:59:10

Антон
19.05.2018
14:59:30

kana
19.05.2018
14:59:44
ну тогда бы сам row polymorphism, если он конечно так уж сильно нужен

Denis
19.05.2018
14:59:45

Антон
19.05.2018
15:00:06

Denis
19.05.2018
15:00:08

kana
19.05.2018
15:00:26
вроде как он полноценно эмулируется через тайплевел-списки с семействами для констрейта на поиск мебмера

Denis
19.05.2018
15:00:30

Антон
19.05.2018
15:00:37
Жалко, что data type a la carte требует перекрывающихся инстансов :(

Denis
19.05.2018
15:00:45

kana
19.05.2018
15:00:55
да нормально выглядит

IC
19.05.2018
15:01:53

Антон
19.05.2018
15:02:58

IC
19.05.2018
15:03:18
да там на гитхабе уже висят и баги и фиксы на это дело

Denis
19.05.2018
15:03:23

Google

IC
19.05.2018
15:03:36
а винил прям совсем-совсем тормозной?

Oleg
19.05.2018
15:03:57

kana
19.05.2018
15:03:59
z :: forall r. Y (_ :: X | r)
t :: Y (_ :: X)
k :: forall r. Y (_ :: X, _ :: C | r)
-- vs
z :: Member X r => Y r
t :: Y '[X]
k :: Members '[X, С] r => Y r
ну сравнил
и че

IC
19.05.2018
15:05:07
а теперь сравни когда мемберов много

kana
19.05.2018
15:05:35
ну вот выше сделал пример с "много"

Oleg
19.05.2018
15:08:17

kana
19.05.2018
15:09:09
а это важно? В пурсе это кроме рекордов мало где нужно же и больше мешает

Oleg
19.05.2018
15:09:19
и синтаксис не пурскриптовый

kana
19.05.2018
15:09:25
так про то и речь

Oleg
19.05.2018
15:09:54

Quet
19.05.2018
15:10:31
интересно есть ли какие концептуальные проблемы сделать в хаскеле рекорды как в пурсе
а не это недоразумение которое сейчас

Oleg
19.05.2018
15:10:43
в пурсе это превращается в обжекты, которые jit ом превращаются в структуры
а в хашкеле у тебя сразу структуры

Quet
19.05.2018
15:12:02
так, и в чем проблема?

Oleg
19.05.2018
15:12:14
и непонятно, нужно ли делать first-class типизированные мапы
и встраивать их в язык, где всё каррировано, т.е. по сути position-indexed

Google

Denis
19.05.2018
15:13:46
вот у Кметта когда-то было https://github.com/ermine-language/ermine/blob/master/stdlib/Prelude/Record.e

Oleg
19.05.2018
15:14:27
Кметт этот язык писал для генерации отчётов. Чтобы аналитики херак херак и репорт
А вы же вроде программисты тут. А желания как у кложуристов

Denis
19.05.2018
15:15:34

Quet
19.05.2018
15:15:55
казалось бы как связана кложура и рекорды в пурсе..

Oleg
19.05.2018
15:17:03
не могу же я в приличном чате сказать "желания как у жаваскриптеров"

kana
19.05.2018
15:22:58
че кстати какой констрейнт всегда невыполим? Какой-нибудь VoidC :: Constraint

Oleg
19.05.2018
15:26:21
вот тебе с оф сайта
обратить внимание на inferred type

kana
19.05.2018
15:28:17
так это конкретно в пурсе же, потому там через него рекорды выражаются, это могло быть ад-хок решением

Oleg
19.05.2018
15:28:50
тайп-фэмилис помимо того, что работают с тайп-левельными списками и твои алгоритмы субтайпинга будут для них квадратичной и кубичной сложности
ещё и всегда partial
у тебя нет тотальной typelevel - операции которая скажет
"для любых вот таких рекордов я могу вычислить тип", ты в лучшем случае можешь наконстрейтить
"для любых вот таких рекордов, в случае если компилятор вычислит мне тип"

kana
19.05.2018
15:32:15
1. потому что списки, а не сеты, как я предполагаю и есть все же основа рядового
2. не тотальное - это не проблема же, мы точно так же верим, что в пурсе проверка на элементы роу сета реализована тотально, как верим, что мембер тотальный
все выше - детали реализации, я спрашиваю про то, является ли это совершенно другой вещью, или же вполне себе выражение роу из пурсы, пусть не эффективное

Google

Oleg
19.05.2018
15:34:12

kana
19.05.2018
15:34:24
мол если дело только в перформансе и то, что синтаксис не такой няшный, как в пурсе, то это конечно проблемы, но не критикал

Oleg
19.05.2018
15:35:26

kana
19.05.2018
15:35:57
окей, слово "полноценно" там лишнее

Oleg
19.05.2018
15:48:21
по крайне в мере в скалке с такими рекордами нахлебался
Именно из-за вот этой частичности тайп фемелей.
В х-ле исчерпывающего опыта нет, конечно
Я правильно понимаю, что твой рекорд может иметь два поля с одним именем и разными типами?

kana
19.05.2018
15:52:05
да, как и в пурсе
Но мне все же интересно, говорим ли мы про одно и тоже
Имеет ли роу полиморфизм к рекордам хоть какое-нибудь отношение кроме того, что их можно реализовать через роу для отображения на типе списка полей с их типами (и сабтайпинг там)

Oleg
19.05.2018
16:04:30
иначе не понимаю, во что такой рекорд в рантайме превращается

kana
19.05.2018
16:07:40
Просто он будет не населен
Что точно так же можно сделать и тут, повесив констрейт на конструктор


Oleg
19.05.2018
16:11:25
Имеет ли роу полиморфизм к рекордам хоть какое-нибудь отношение кроме того, что их можно реализовать через роу для отображения на типе списка полей с их типами (и сабтайпинг там)
ну да, самая обыденная операция, например - слить два рекорда в один, убедившись, что результат слияния можно спроецировать на требуемый тип.
Однако, естественно, что ты там хочешь не просто мержить, а всякий реюзабельный функционал юзать, инстансы, эффекты. Отсюда полиморфизм и появляется, но в то же время должен сохранять информацию на уровне "сумма полей двух этих больше этого"
проблемы там в общем, что нужны самые простые вещи:
априорная ассоциативность, идемпотентность суммы именно в полиморфном смысле
иначе для любой операции тебе нужно набрать сорок констрейтов, чтобы наперёд всё выполнить
Я догадываюсь, что для этого вместо HList подобных структур можно использовать сами прямо контексты, т.к. они обладают похожими свойствами. Но не видел реализаций


Alexander
19.05.2018
17:57:13
в твиттере классный срачик про документацию