A64m
Daniel
ну так он и был из немецкого и американского университетов
Daniel
да и сейчас есть, просто модель заглохла (но докторскую он на ней защитил)
Anatolii
ого, саксес стори хаскеля
Daniel
вот да. оттуда я вынес представление о хаскеле как о языке для академических ученых. потому как с прикладной областью не сложилось
саша
A64m
это в какие годы было-то?
Ю ли я? 🤔
Daniel
коллеги, вам обязательно надо со мной спорить
Daniel
?
Daniel
я же предельно ясно выражаюсь
Daniel
A64m
ну, не думаю, что много найдется хаскелистов, которые скажут, что хаскель годился для чего-то практического года до 2010
Daniel
а что изменилось?
Daniel
раз уж я к вам забрел - повышу уровень эрудиции :)
A64m
более-менее нормальный рантайм, библиотеки какие-то появились
Cheese
Cheese
не тормозит на ровном месте?
A64m
ну и общая недоделанность как-то сгладилась
Leonid 🦇
Хаскель в проде, зато на свободе
Artem
Параллельный сборщик, мне казалось, всё ещё недоделанный: на большом количестве процессоров (48 и выше), всё начинает сильно тормозить
Leonid 🦇
Запускай два процесса по 24 ядра
Денис
Ошибка какая-то странная не могу разобраться плиз хелп https://pastebin.com/mN5s4iwX
Зигохистоморфный
просто добавь AllowAmbiguousTypes в прагмы
Денис
А почему они Ambiguous?
Cheese
Денис
Понял
Cheese
Денис
Это из-за хиндли-милнера и возможной неинъективности Context?
Денис
Если добавить AllowAmbigousTypes, то оно иногда будет при выведении типов фейлиться?
Cheese
их, родимых
Cheese
Денис
Про Proxy не понял
Cheese
Cheese
Денис
http://hackage.haskell.org/package/base-4.11.1.0/docs/Data-Proxy.html?
Cheese
добавление в функцию фиктивного параметра Proxy m позволит вычислить m
Денис
понял
Денис
костыль какой-то
Cheese
Cheese
хотя она сама что-то вроде костыля в системе типов
Денис
эх
A64m
A64m
эх
можно не прокси, а TypeApplications использовать, там просто типы указываются, параметры в функции добавлять не надо
Денис
Ну то есть тоже явно тип прописывать нужно, но не через ::, а через @?
A64m
ну да, часть типа
Cheese
A64m
ну AllowAmbiguousTypes отключают проверку, которая запрещает писать код, который без TypeApplications использовать не получится
Денис
Вообще может этого можно как-то избежать? К примеру вооще type families не использовать. Я хотел абстрагировать доступ к базе данных, что б в будущем можно было бд заменить на rest api. Нашёл статейку: http://www.parsonsmatt.org/2018/03/22/three_layer_haskell_cake.html. Там на втором уровне AcquireUser вроде то, что мне нужно. Но я не нашёл хорошего способа добавить туда инициализацию модели и извлечение значения из монады. Можно, конечно, использовать конкретные функции, но это будет нарушением абстракции, просто поменять реализацию не получится.
A64m
а data families использовать можно?
Денис
Ещё был вариант написать код использующий определённый набор функций, которые делают запросы к бд, а позже заменить этот модуль на тот, который использует rest api и реализует функции с такими же названиями
Денис
Да всё можно, лишь бы работало
Денис
Попробую
Денис
data не хотел, потому что сначала в конструктор обернуть надо, потом разворачивать...
Денис
Ilya
хах, я недавно пробовал похожую задачу решить, только ещё похардовее
Ilya
но в итоге понял что оно не выразимо в текущей системе типов хаскеля
Daniel
и что делает хаскелист, встретив такое?
Ilya
смиряется
Daniel
а задачу куда?
Ilya
но вообще в планах немного переписать API surface
Ilya
что бы на GADT легло
Ю ли я? 🤔
Ilya
угу, там тоже была проблема с тем, что хотелось в произвольной монаде использовать типы данных и без явного указания манадки через TypeApplication или без оборачивания в newtype не выходило
A64m
быть хаскелистом:
1) изобретаешь ньютайпы как стредство деланья в хаскеле чуть менее чем всего
2) избегаешь их
Ilya
я не настоящий сварщик
Ilya
у меня даже PhD нет
Kirill
а каску где нашёл?
Aliester
apt install cask
A64m
да желание их избегать - это нормально
A64m
и понятно
IC
Leonid 🦇
Ilya
на стеке вопрос забавный, каков приоритет оператора (::)? Он меньше, чем у ($), -1 что ли тогда
Aleksei (astynax)
Это не оператор
Aleksei (astynax)
Это синтаксис