Антон
Жалко, что data type a la carte требует перекрывающихся инстансов :(
Зигохистоморфный
кана
да нормально выглядит
IC
IC
да там на гитхабе уже висят и баги и фиксы на это дело
IC
а винил прям совсем-совсем тормозной?
Oleg
кана
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
а теперь сравни когда мемберов много
кана
ну вот выше сделал пример с "много"
Oleg
кана
а это важно? В пурсе это кроме рекордов мало где нужно же и больше мешает
Oleg
и синтаксис не пурскриптовый
кана
так про то и речь
Oleg
Quet
интересно есть ли какие концептуальные проблемы сделать в хаскеле рекорды как в пурсе
Quet
а не это недоразумение которое сейчас
Oleg
Oleg
в пурсе это превращается в обжекты, которые jit ом превращаются в структуры
Oleg
а в хашкеле у тебя сразу структуры
Quet
так, и в чем проблема?
Oleg
и непонятно, нужно ли делать first-class типизированные мапы
Oleg
и встраивать их в язык, где всё каррировано, т.е. по сути position-indexed
Зигохистоморфный
вот у Кметта когда-то было https://github.com/ermine-language/ermine/blob/master/stdlib/Prelude/Record.e
Oleg
Кметт этот язык писал для генерации отчётов. Чтобы аналитики херак херак и репорт
Oleg
А вы же вроде программисты тут. А желания как у кложуристов
Зигохистоморфный
Quet
казалось бы как связана кложура и рекорды в пурсе..
Oleg
не могу же я в приличном чате сказать "желания как у жаваскриптеров"
кана
кана
че кстати какой констрейнт всегда невыполим? Какой-нибудь VoidC :: Constraint
Oleg
Oleg
вот тебе с оф сайта
Oleg
Oleg
обратить внимание на inferred type
кана
так это конкретно в пурсе же, потому там через него рекорды выражаются, это могло быть ад-хок решением
Oleg
тайп-фэмилис помимо того, что работают с тайп-левельными списками и твои алгоритмы субтайпинга будут для них квадратичной и кубичной сложности
Oleg
ещё и всегда partial
Oleg
у тебя нет тотальной typelevel - операции которая скажет
"для любых вот таких рекордов я могу вычислить тип", ты в лучшем случае можешь наконстрейтить
"для любых вот таких рекордов, в случае если компилятор вычислит мне тип"
кана
1. потому что списки, а не сеты, как я предполагаю и есть все же основа рядового
2. не тотальное - это не проблема же, мы точно так же верим, что в пурсе проверка на элементы роу сета реализована тотально, как верим, что мембер тотальный
кана
все выше - детали реализации, я спрашиваю про то, является ли это совершенно другой вещью, или же вполне себе выражение роу из пурсы, пусть не эффективное
кана
мол если дело только в перформансе и то, что синтаксис не такой няшный, как в пурсе, то это конечно проблемы, но не критикал
кана
окей, слово "полноценно" там лишнее
Oleg
по крайне в мере в скалке с такими рекордами нахлебался
Именно из-за вот этой частичности тайп фемелей.
В х-ле исчерпывающего опыта нет, конечно
Oleg
Я правильно понимаю, что твой рекорд может иметь два поля с одним именем и разными типами?
кана
да, как и в пурсе
кана
Но мне все же интересно, говорим ли мы про одно и тоже
кана
Имеет ли роу полиморфизм к рекордам хоть какое-нибудь отношение кроме того, что их можно реализовать через роу для отображения на типе списка полей с их типами (и сабтайпинг там)
Oleg
иначе не понимаю, во что такой рекорд в рантайме превращается
кана
кана
Просто он будет не населен
кана
Что точно так же можно сделать и тут, повесив констрейт на конструктор
Oleg
Имеет ли роу полиморфизм к рекордам хоть какое-нибудь отношение кроме того, что их можно реализовать через роу для отображения на типе списка полей с их типами (и сабтайпинг там)
ну да, самая обыденная операция, например - слить два рекорда в один, убедившись, что результат слияния можно спроецировать на требуемый тип.
Однако, естественно, что ты там хочешь не просто мержить, а всякий реюзабельный функционал юзать, инстансы, эффекты. Отсюда полиморфизм и появляется, но в то же время должен сохранять информацию на уровне "сумма полей двух этих больше этого"
Oleg
проблемы там в общем, что нужны самые простые вещи:
априорная ассоциативность, идемпотентность суммы именно в полиморфном смысле
Oleg
иначе для любой операции тебе нужно набрать сорок констрейтов, чтобы наперёд всё выполнить
Oleg
Я догадываюсь, что для этого вместо HList подобных структур можно использовать сами прямо контексты, т.к. они обладают похожими свойствами. Но не видел реализаций
Alexander
в твиттере классный срачик про документацию
Alexander
гонзлес развел
Alexander
не дальше от Haskell чем обсуждение рядового полиморфизма
Alexander
или мне нужно процитировать твиты, чтобы это автоматом онтопиком стало?
IC
Alexander
https://mobile.twitter.com/GabrielG439/status/997139222711562243
Alexander
отсюда началось
Евгений
Поэтому сигнатуры не оч документация
Alexander
это начало, там потом несколько веток дискуссии
Alexander
про то как хорошо писать документацию и что обязан сделать автор перед тем как выкладывать пакет
Евгений
Твиттор неудобно. Запилите канал с разбором твиттер-срачей
Евгений
Как у медузы про политоту, только для хаскелистов
Alexander
на самом деле хоть это и не совсем онтопик было бы интересно послушать мнения