Влод
мб. под одну конкретую либу.
http://hackage.haskell.org/package/language-java вот что нашёл
генерировать скорей всего буду жёстко в строки. без написания либы под котлиновый AST
Влод
ну тип не конвертация кода. а просто оборачивание
например в джаве делают гетер/сетер, в котлине есть проперти (ну хотя котлин такое умеет имплиситно делать, но это как пример)
Anonymous
а
Anonymous
вот такое в скале точно не помешало бы
Влод
Alexander
в inline-java кстати уже есть чего интересного. Ну и вообще такой подход к разработке и интеграции с чужими экосистемами
Alexander
даже в inline-c которая из этих библиотек самая простая было бы что рассказать
Cheese
A64m
все время обсуждения ленгвидж-прагм и как хорошо, что в идрисе их нету я чувствовал, что что-то не то, но не мог вспомнить. Но теперь-то вспомнил. В идрисе же точно такая же система ленгвидж-прагм для расширений
https://github.com/idris-lang/Idris-dev/blob/master/libs/prelude/Builtins.idr#L5
Alexander
это не в счет
Alexander
это не диалекты
кана
может кто разъяснить?
кана
фандепы для меня сложны чет
кана
выглядит как какая-то магия
кана
типа "в этой B точно есть где-то тип A, так что можно вывести B, зная A"
кана
а как это работает хз
Alexander
a -> b значит, что a определяет b
A64m
ну самая простая интуиция, наверное, это что-то вроде ассоциированных типов. Т.е. у нас есть MPTC и мы делаем что-то вроде Array IntArray Int раз для интаррея элемент всегда инт - мы можем улучшить вывод типов донеся это знание до компилятора
A64m
т.е. из одного типа следует и тип для другого параметра
Влод
https://github.com/mmirman/ImperativeHaskell/blob/master/Main.hs
с той же поисковой страницы нашёл императивный хаскель
наверное хорошо сочитается с инлайн джавой
Влод
https://github.com/vincenthz/language-java/blob/master/Language/Java/Syntax.hs
можно как-нибудь снаружи подключить линзы чтобы они нагенерили classTypeDecl . classDecl . ident . name
Влод
хотя там всё равно по кейзам придётся проходится. но вопрос всё равно интересен
Anonymous
это не в счет
правильно, это не в счет. это тоже диалекты, и это тоже плохо. но это не "расширения", а "экспериментальные фичи", т.е. то, что еще не реализовано в компиляторе полностью. это не возможность собрать язык из кубиков, это возможность заглянуть в будущую версию языка.
Alexander
в ghc в общем-то тоже не язык из кубиков, а фичи не включенные в древний стандарт
Alexander
не понимаю как %total это экспериментальная фича
Danila Matveev
подскажите, пожалуйста,
* либу для линейной алгебры с претензией на скорость (blas под капотом), здесь https://wiki.haskell.org/Libraries_and_tools/Mathematics#Linear_algebra целая россыпь, помимо этого в гугле еще либа Кметта попадалась. Спрашиваю, потому что актуальность, полноту и удобство каждой рассматривать самостоятельно может много времени потребовать. По функциональности хочется хотя бы многомерных матриц, вычисление обратной.
* тот же вопрос по работе с изображениями.
Alexander
меняет поведение посильнее чем любая из прагм
Alexander
Linear точно не про скорость
Alexander
есть hmatrix
Alexander
из того что Блас под капотом
Alexander
ещё у FPC что-то было
Danila Matveev
FPC?
Danila Matveev
Alexander
fp complete
Alexander
не могу найти что-то репозиори
Алексей
Из работающего только hmatrix
Danila Matveev
судя по беглому осмотру функциональности хватает, спасибо
Danila Matveev
а про работу с изображениями знаете что-нибудь подходящее?
Алексей
JuicyPixels? Сам не пробовал, но вроде хвалят
Danila Matveev
спасибо
Anonymous
не понимаю как %total это экспериментальная фича
я про %language, который действительно меняет язык (синтаксис и семантику). %access %default просто задают модификаторы по умолчанию, т.е. действуют в рамках существующего синтаксиса и семантики, т.е. не меняют язык, поэтому они таки не в счет. им можно было дать какую-нибудь другую нотацию, чтобы не пугать людей прагмами.
A64m
A64m
Anonymous
тут разница в том, что можно всю жизнь пользоваться Идрисом и его библиотеками и ни разу не использовать %language самому и не увидеть его в библиотеке. и это нормально.
A64m
учитывая что первая версия вот только вышла и прагм расширений уже 7 или около того, то вроде понятно как оно дальше будет развиваться?
Anonymous
total без процента это штатный модификатор. в Идрисе система типов различает тотальные функции и нетотальные, они прекрасно сосуществуют.
A64m
ну так что? если UndecidableInstances "диалект" - то и это диалект
Anonymous
настоящая прагма одна - %language. для штатного пользования языком она не нужна, а только для попыток потрогать еще не реализованные фичи. остальное просто модификаторы, существующие в рамках языка.
Anonymous
причем тут UndecidableInstances?
A64m
она отключает проверки завершимости тайпчекера
A64m
Anonymous
не совсем. проверки остаются на месте. просто в Идрисе два стрелочных типа - один тотальный, другой нетотальный, с боттомом. но отдельного синтаксиса для них не придумали (вроде -> `=>`), а сделали модификатор total. это часть единой системы типов. а что такой UndecidableInstances, Вы мне лучше сами объясните. имхо, это костыль.
Алексей
Это отключение проверки завершимости для вывода инстансов. Безобиднейшая вещь.
Anonymous
давайте говорить критериально. если эта штука не меняет синтаксиса и семантики, то она не меняет язык. хотя, если без нее не компилируется правильный код, то про нее надо знать. получается, костыль.
A64m
лучшее определение костыля, конечно
Anonymous
если не нравится мое определение, то предложите другое.
Danila Matveev
Alexander
костыль это быстрое неканоническое решение проблемы, ухудшающее maintenability продукта
Alexander
например, зависимые типы через синглетоны это вполне себе костыль
Alexander
или map через мутабельный список внутри спрятанный от пользователя это костыль
Alexander
этим eager языки увлекаются
Alexander
вообще это интересно, почему весь этот шум вокруг прагм вернулся, я помню когда я начинал на всяких митапах каждого второго спрашивали а сколько расширений у вас в проекте и т.п.
Alexander
я понимаю, что лучше бы многие включили, и почище модуль бы выглядел, но почему язык сложнее из-за этого и чем это мешает не понимаю
Alexander
более того для многих расширений мне очень нравится ограниченность, что мне не на все модули AllowAmbigousTypes включат, а только где попрошу (не помню примеров нормальных, когда мне это было нужно, но такое расширение пафоснее)
Alexander
если делать это опциями компилятора, то будут в заголовке {-# OPTIONS_GHC -XAllowAmbigousTypes, #-} что тоже самое, но в профиль
Alexander
а если опасное запретить, поломается код..
Alexander
да даже если только безопасные сделать через --language=Haskell2020
Alexander
вот будет там MagicHash какой
Alexander
и вся помощь для новичков, которые не должны levity полиморфные сигнатуры видеть исчезнет
Alexander
они увидят и убегут сразу
Alexander
а новички это важно
Alexander
в итоге ситуация дурацкая, хоть все плохо, но оно хотя бы обосновано, и понятно в каком направлении двигаться, и есть ощущение, что простые решения будут просто хуже
Алексей
А какие волшебные ошибки случаются с PolyKinds
Алексей
На смотришь и думаешь: чаво?
Alexander
ну и Haskell развивается благодаря исследованиям
Alexander
если цена новой фичи + одно расширение и через полгода ты можешь пользоваться то это одно
Alexander
а если надо собрать совет магов^W^W комитет и ждать 5 лет, то это другое
Alexander
впрочем совет магов бы эффективнее был
Алексей
Магов нету, вот в чём беда
Alexander
беда в том, что при этом они эффективнее