Функциональный язык с расширяемыми записями
А вот что у нас есть из функциональщины со статической типизацией, но чтобы типы записей не нужно было объявлять заранее вообще, но при этом они бы свободно участвовали в выводе типов?
Очень уж удалбывает при работе с БД и оперденями необходимость объявлять типы. Использовать кортежи неудобно - без имен не поймешь что где в кортеже из 20-30 полей.
Приходится использовать кложурь и мапы с keyword-ключами и следить за собственной головой при рефакторингах, чтобы не поломать все нахрен, т.к. проверок статических там вообще никаких нет.
В LINQ в C# мы можем сделать анонимный класс с именованными полями, но вроде не можем вернуть его из функции и использовать где-попало за пределами текущей области видимости.
В F# ад и содомия - записи нужно объявлять заранее, что дичайше огорчает при рефакторинге - приходится бегать между объявлением и тыщами мест создания записей.
В хаскеле записи вообще, похоже, срачеразжигающая тема и ни одно из расширений вроде не считается общепринятым.
PS: Язык должен быть с иммутабельностью, хотя бы как в clojure и со статической типизацией. Зачем вы жабаскрипт вспоминаете, если я явно написал, что clojure напрягает отсутствием статического анализа кода?
Очень уж удалбывает при работе с БД и оперденями необходимость объявлять типы. Использовать кортежи неудобно - без имен не поймешь что где в кортеже из 20-30 полей.
Приходится использовать кложурь и мапы с keyword-ключами и следить за собственной головой при рефакторингах, чтобы не поломать все нахрен, т.к. проверок статических там вообще никаких нет.
В LINQ в C# мы можем сделать анонимный класс с именованными полями, но вроде не можем вернуть его из функции и использовать где-попало за пределами текущей области видимости.
В F# ад и содомия - записи нужно объявлять заранее, что дичайше огорчает при рефакторинге - приходится бегать между объявлением и тыщами мест создания записей.
В хаскеле записи вообще, похоже, срачеразжигающая тема и ни одно из расширений вроде не считается общепринятым.
PS: Язык должен быть с иммутабельностью, хотя бы как в clojure и со статической типизацией. Зачем вы жабаскрипт вспоминаете, если я явно написал, что clojure напрягает отсутствием статического анализа кода?
no subject
А если по теме C# - есть dynamic жэ. Я даже видел ORM на этом.
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
no subject
(no subject)
(no subject)
no subject
(no subject)
no subject
Но генерить это руками - это печаль.
no subject
no subject
http://www.impredicative.com/ur/tutorial/tlc.html
no subject
(no subject)
(no subject)
no subject
Т.е. на старте запускаемся, коннектимся к БД, ищем описание таблицы, генерируем код, потом дергаем ручку, компилим и дальше всё чисто статически.
(no subject)
(no subject)
no subject
http://hackage.haskell.org/packages/archive/HList/0.2.3/doc/html/Data-HList-Record.html
Имена полей можно переиспользовать, а в типе функции от записей требуется только содержать необходимые поля. Вкупе с Constraint Kinds должно получиться хорошо.
no subject
no subject
Или тебе не для БД, а "вообще"?
(no subject)
no subject
а он мне:
Статическая утиная типизация в действии. окамл.
no subject
no subject
gist.github.com/2964305
Также:
hackage.haskell.org/package/has
Пока нужно объявлять поля, но в новых ghc есть типы-строки, которые эту проблему устраняют.
no subject