Alexander
у него правда дико длинный период
Leonid 🦇
Его по дефолту берут
Alexander
и он вроде не форкается
Alexander
не помню
Dmitrii
> Отдельные люди отличные вещи делают на Elm Например?
Мы на работе используем Elm для фронтенда. Это связано с тем, что человек, который пишет фронтенд, знал до этого только OCaml (да, и такие бывают!), и Elm проще начать новичку. Но сейчас уже думаем перейти на что-то другое. Сложность фронтенда становится очень большой. Так как в Elm нет хорошей поддержки абстракций (вроде тайпклассов), то в итоге получается, что приходится писать go на фронтенде. А ещё в качестве бэкенда используется Haskell, и все библиотеки по автоматической генерации Elm-типов из Haskell типов, JSON энкодеров и декодеров и API эндпоинтов работают очень плохо. Одна библиотека на Generic'ах, но даже не поддерживает суммы типов (и даже енумы не поддерживает!). А вторая библиотека хоть и поддерживает суммы типов, но на TemplateHaskell и не поддерживает фантомные типы. Становится очень больно 😥
Антон
Anonymous
Dmitrii
Нет бы сразу, скажем, PureScript взять
> Это связано с тем, что человек, который пишет фронтенд, знал до этого только OCaml (да, и такие бывают!), и Elm проще начать новичку. Читай мотивацию во втором предложении. Не факт, что с PureScript станет намного лучше. Библиотеки типа purescript-bridge тоже не особо помогают быть продуктивным на полную катушку...
Dmitrii
На что же планируете переходить?
Есть три варианта: 1. PureScript 2. GHCJS 3. Написать свою нормальную библиотеку для генерации Elm-кода
Dmitrii
4. Написать свой язык :^)
Можно. Но продукты релизить и зарабатывать деньги тоже хочется 🙂
Антон
А вообще - писать библиотеку для генерации кода на языке, который транспилируется в JS - ну, такое
Dmitrii
А вообще - писать библиотеку для генерации кода на языке, который транспилируется в JS - ну, такое
Писать это всё руками и тратить на это в два раза больше времени — ещё больше такое 🙂
Iliya
ждать Wasm ?
A64m
не знаю, почему у людей столько оптимизма по отношению к васму
Iliya
смотрю что 4 главных браузера поддерживают, не пробовал руками
A64m
ну поддерживает, и что? вы на васме собираетесь писать?
Iliya
похоже что обычные сайты на нём смысла нет делать, только что-то игрушечное?
A64m
ну, теоретически можно в него компилировать какой-то нормальный язык, но ни один нормальный язык пока в него не компилируется, и нормально не будет пока кое-какие изменения в васме не произойдут
Iliya
я не о модели компиляции, с этим кажется проще всего справиться хотя и не скоро. А просто html с каким-то аналогом jQuery на нём будет смысл на чём-то типизированном верстать или это для игрушек, видео и тд?
Iliya
уж хаскель-то компилятор всяко осилит
A64m
нет, хаскель в нынешний васм нормально не скомпилировать, будет в 3-5 раз тормознее нативного где-то
A64m
но все лучше, чем ghcjs, конечно
Алексей
не юзайте васм для разработки фронта пожалуйста
A64m
обязательно будут
Алексей
он не умеет нормально в DOM
Алексей
насколько я знаю
Алексей
и скорее всего нескоро сможет в него, если вообще сможет
Алексей
и вообще не для этого васм делали вообще, чтобы на нём фронты писать, чтобы всякие жирные рантаймы по сети гонять
A64m
да никого не волнует, что не для этого
A64m
будут писать, потому что яваскрипт хуже гитлера
Iliya
не понял, откуда жирные рантаймы
Iliya
и что такое жирные по сравнению с JS-библиотеками
Антон
ждать Wasm ?
Wasm работает с DOM-ом пока только через JS
A64m
Rust
> какой-то _нормальный_ язык
A64m
т.е. не совсем убогий ФЯ
Антон
т.е. не совсем убогий ФЯ
Rust никогда ФЯ и не был. И если уж на то пошло, то он для компиляции в wasm лучше, чем сабж, подходит
A64m
правильно, не был, а надо нормальный язык
Антон
Ты так говоришь, как будто только ФЯ может быть нормальным ЯП
A64m
конечно, только ФЯ и может, это уже лет сорок известно
GG
такое ощущение будто этот чат заболел вирусом растохайпа
GG
очень опасный вирус. долго выводится
A64m
на фоне остального говна которое хайпят, раст еще более-менее смотрится
Антон
Раст и плюсы
Плюсы - очень условно нормальный язык
A64m
Раст и плюсы
а чего не интеркол и малболг?
Alexander
Вопрос. Почему в данной конструкции добавление forall s приводит к тому, что переменная типа a становится неизвестной в скоупе конструктора Constr? И как это исправить? ScopedTypeVariables не помогают. Если вписать forall s a, то ведь это будет уже другая a, не та что в типе, верно? data Unknown a where Constr :: forall s. Unknown a
Alexander
Not in scope: type variable ‘a’
Кабачок
Она никогда не та, что в типе
Alexander
Что это значит?
Кабачок
Вангую что без forall s работает неявный форол, а с ним уже нет
Alexander
data Unknown a where Constr :: Unknown a data Unknown a where Constr :: Unknown b Видимо, действительно не та. Оба варианта работают
Кабачок
Возможно, если записать это в стиле Idris будет немного понятнее: data Unknown : (a : Type) -> Type where Constr : {a : Type} -> Unknown a
Alexander
Не особо, если честно.
Кабачок
Для не GADT таким переменным нужны имена чтобы вывести тип конструтора, а в GADT ты описываешь типы конструкторов сам.
Кабачок
Настоящие хаскеллисты, раскажите как там правильно)
Кабачок
(GADT-ам имена в типах понадобятся когда типы станут зависимыми, только об этом никому.)
Alexander
У меня есть некий Enum, который приходит в функцию. Мне хочется, чтобы эта функция была полиморфной по возвращаемому типу, и выбирать нужный тип по значению от моего Enum, возвращать какое-нибудь дефолтное значение (в более сложных случаях много чего с этим делать). Как обычно такая задача решается? И не тут ли должны появляться вот эти самые зависимые типы?
Leonid 🦇
TF или FD?
Alexander
Не уверен. Пока моя интуиция про FD такая: можно указать две переменных типа a и b, где a -> b, и если я увижу тип X на месте a, то я точно должен буду иметь тип Y для b, и никакой другой. Я тут не вижу, как от Enum, стоящего на позиции a, сделать разные типы на позиции b в зависимости от значений Enum.
KrivdaTheTriewe
https://m.hh.ru/vacancy/26915246
Антон
https://m.hh.ru/vacancy/26915246
> Опыт работы - 3-6 лет 😢
Alexander
Но именно это и хочется. От значений. Получил я, скажем, строку по сети, и смотрю, что там написано. Написано "Int", - выбираю тип Int. Написано "Char" - выбираю Char. Но может, я странного хочу
Alexander
Так это и есть завтипы, не?
Я не знаю, поэтому и задаю наводящие вопросы
Евгений
Так это и есть завтипы, не?
Это зависимая сумма
Антон
Разве это можно сделать на нынешнем сабже?
Евгений
Она в хаскеле эмулируется экзистенциалом по тайпклассу
Антон
Она в хаскеле эмулируется экзистенциалом по тайпклассу
Ох. Разве экзистенциальный тип можно даункастить?
Евгений
Зависимое произведение нельзя сэмулировать (на самом деле можно как forall по тайпклассу с функцией a -> Type, если typeintype включить)
Евгений
Ох. Разве экзистенциальный тип можно даункастить?
А как ты задаункастишь зависимую сумму?