Cheese
x = f1 In.x In.y y = f1 In.x In.y
Cheese
если написать x <- pure $ f1 x y, то старый x исчезает
Cheese
можно более общий синтаксис сделать where namespace In where Foo{..} = input y = z чтобы произвольные идентификаторы объявлять, не только поля
A64m
в нормальном языке должны быть модули любой степени вложенности (и рекорды должны быть модулями)
A64m
вместо этого в хаскеле теперь 256 костылей для "модуляризации" "рекордов"
A64m
такой существует?
с вложенными модулями существуют, но они по другим причинам ненормальные.
a66ath
В крестах можно неймспейс в неймспейсе
Cheese
вместо этого в хаскеле теперь 256 костылей для "модуляризации" "рекордов"
что надо сделать, чтобы появился один, но правильный костыль?
A64m
неймспейс в неймспейсе и в хаскеле можно
A64m
речь-то про модули
Cheese
в плюсах структура сама является нэймспэйсом из коробки
A64m
ну после дупликейт рекорд филдс и в хаскеле рекорд является своего рода неймспейсом (для него правда штатная квалификация не работает по странной причине)
A64m
это как?
Data.Vector.Unboxed
A64m
это все костыли для нормальных модулей, что "объекты", что хаскельные "рекорды"
A64m
как вообще об этом можно не догадаться
a66ath
Ладно, прочитаю книгу дракона и запилю язычок с модулями all the way down
Cheese
обратно совместимый со всеми расширениями GHC
a66ath
Да
A64m
во время всех рекордовых обсуждений в хаскеле, всегда дискутируют два типа людей 1) "практики" которые хотя протащить рекорды как в индустриальном говноязыке с TDNR и селекторами через точечку 2) пришельцы с нептуна, которые только отряхнули азотный лед с щупалец и еще не видели рекорды ни в одном языке вообще, и хотят изобрести их полность с чистого листа
A64m
изредка звучат предложения "а чего бы не посмотреть как делают рекорды-то?" от янга какого-нибудь, который даже писал обзор рекордов в урвеб, но это все обычно просто игнорируется
a66ath
@A64m_qb0 веди блог
a66ath
Я б читал
Cheese
modFoo Foo{.. as In} = Foo{..} where x = f In.x — такая идея
можно так с линзами написать. но зачем с линзами, если можно без линз?
Ilya
Я б читал
ты его и читаешь
Alexander
@A64m_qb0 а какие должны быть модули?
A64m
неизвестно, это все еще активный ресерч
A64m
миксины, наверное
Alexander
а какие свойства точно нужны?
A64m
они должны быть частично определенные, т.е для чего-то только сигнатуры есть, взаимную рекурсию должны поддерживать и быть первоклассными, т.е. чтоб в любом выражении их можно было сконструировать/испортировать
A64m
т.е. леннартовские вайлдкарды были бы обычным импортом/применением анонимного модуля к сигнатуре
Alexander
кажется мне надо читать больше статей
Зигохистоморфный
@A64m_qb0 c 40-вой минуты) со всем согласен? https://www.youtube.com/watch?v=rGxdc0KMnc4&feature=youtu.be
Anonymous
@fshp1991 будет жить. Поприветствуем!
A64m
рекорды, это первоклассные модули в которых типы нельзя объявлять
Ilya
Рекорды с первоклассными типами? Как в агде?
Евгений
Ну модули это второклассные рекорды же
Евгений
Не очень понятно как сделать объявления типов первоклассными
Евгений
У нас и так компиляция еле-еле тоталится, а что будет, если у тебя функции будут конструировать модули? Это уже не типизация, а метапрограммирование какое-то
A64m
первоклассные модули быстро компилируются, другое дело что они тормозят
Евгений
Ты хочешь их разруливать в рантайме?
A64m
ну они в такой же степени в рантайме как тайпклассы к примеру
Alexander
леннартовые вайлдкарды это record wildcards?
Alexander
и вообще что про это почитать?
A64m
про это - это про что?
Alexander
модули рекорды и все все все
Dmitry
@A64m_qb0, присоединяюсь к ^
A64m
как обзор по модулям, вводную часть дрееровского диссера http://people.mpi-sws.org/~dreyer/thesis/main.pdf
A64m
потом всякие новинки
A64m
f-ing https://people.mpi-sws.org/~rossberg/f-ing/f-ing-jfp.pdf
A64m
и 1ML https://people.mpi-sws.org/~rossberg/papers/Rossberg%20-%201ML%20--%20Core%20and%20modules%20united%20[JFP%20Draft%202].pdf
A64m
mixml https://people.mpi-sws.org/~rossberg/mixml/mixml-toplas.pdf
A64m
сейчас насчет рекордов еще подумаю
Alexander
пасиба
Евгений
А есть ISWIM-наследники с нормальными рекордами вообще?
Евгений
С модулями проще, пруф-оф-коцепт можно на примере штандард-млей увидеть
Kakadu
А что такое норм рекорды?
A64m
есть имплементации с полиморфными рекордами. окамловские объекты - это полиморфные рекорды (со страшным синтаксисом зачем-то)
A64m
в hugs есть полиморфные рекорды
A64m
есть пурскрипт и урвеб http://blog.ezyang.com/2012/04/how-urweb-records-work-and-what-it-might-mean-for-haskell/
A64m
насколько все это можно считать нормальным, это вопрос конечно
A64m
ну и есть куча библиотечных реализаций
A64m
полиморфные рекорды, в принципе, это пересекающаяся область с дататайп дженериками
A64m
так что с пруф оф концептами не хуже, чем с модулями, может и лучше, потому что новинки выше как раз не имплементированы в языках которыми можно более менее пользоваться
Евгений
У mixml'я есть нерабочий прототип, насколько я знаю
Евгений
https://github.com/rossberg/mixml?files=1
Anonymous
@upsilon будет жить. Поприветствуем!
Евгений
в hugs есть полиморфные рекорды
Это? https://www.haskell.org/hugs/pages/hugsman/exts.html#sect7.2
A64m
да
Евгений
Насколько же хугс непривычный
Евгений
Rec (x::a | r) is the type of a record with an xcomponent of type a. The row variablerrepresents the rest of the row; that is, it represents any other fields in the record apart from x. This syntax---for record type extension---was chosen to mirror the syntax that we have already seen in the examples above for record value extension. The constraint r\x tells us that the type on the right of the => symbol is only valid if "r lacks x," that is, if r is a row that does not contain an x field. If you are already familiar with Haskell type classes, then you may like to think of \x as a kind of class constraint, written with postfix syntax, whose instances are precisely the rows without an x field.
Евгений
Никто не пробовал пруф-оф-концепт такого в гхц сделать?
Anonymous
можно нубский холиварный вопрос? Stack или Haskell Platform?
Timofey
Стак
Timofey
Я даже не уверен, что вопрос достоин холивара
Alexander
стак говно полное и хуже кабала