Denis
в других языках придумали ПО чтобы описывать типы в хаскелле?
Ilya
Описать сигнатуру одной функции не сложно, а если их 100?
Anonymous
ну ты же хочешь нормальную типизацию если используешь хаскель, так?
Ilya
Similarly, to export the following Haskell function: triple :: Int -> Int triple x = 3*x so that it can be used in foreign codes, you only have to write: foreign export ccall triple :: Int -> Int
Ilya
Зачем тут Int -> Int писать второй раз?
Cheese
а есть где-нибудь практика использовать TH как компайл-тайм ассерты или это я наркоманю?
я так делал, а потом всё-таки смог ограничения типами выразить
Denis
@cblp_su ну мне либо регулярки на зав. типах переписывать(Вейрих после strangeloop библиотеку не релизнула, к слову?), либо так
Denis
можно конечно и самому написать, но это долго и лень
Cheese
Зачем тут Int -> Int писать второй раз?
потому что в общем случае ты захочешь одну полиморфную функцию экспортировать 15 раз с разными мономорфными типами
Denis
https://github.com/sweirich/dth/tree/master/regexp
Denis
ну как всегда, подготовлено для доклада/пейпера и всё
Кабачок
Зачем тут Int -> Int писать второй раз?
а зачем ты это в первый раз писал? :troll_face:
Ilya
потому что в общем случае ты захочешь одну полиморфную функцию экспортировать 15 раз с разными мономорфными типами
Ну хорошо, это принято. А наоборот зачем? Из сишки в хаскель? Там какие неоднозначности?
Ilya
Короче это всё равно отдаёт какой-то лишней работой. Не знаю, может меня избаловал swig
Ilya
Вот там можно импортировать целую либу за O(1) от размера либы
Ilya
Не за O(n)
Cheese
наверное, для Haskell тоже можно написать swig
Cheese
наверное, кто-то для себя уже написал
Cheese
а swig, простите, в какой язык встроен?
Ilya
Он не встроен, это внешний инструмент для связывания C/C++ и остальных языков
Ilya
Список "остальных языков" Allegro Common Lisp support Android support C# support Chicken support D support Go support Guile support Java support Common Lisp support Lua support Modula3 support MzScheme/Racket support Ocaml support Octave support Perl5 support PHP support Pike support Python support R support Ruby support Tcl support
Ilya
Х-ля нет
Кабачок
https://wiki.haskell.org/Foreign_Function_Interface#Tools
Andrei
Alexander
Описать сигнатуру одной функции не сложно, а если их 100?
есть генераторы, но все равно тебе нужно будет в какой-то момент маппить свои типы на сишные
Кабачок
Гитхаб в очередной раз что-то сделал с интерфейсом — опять глаза текут.
Aragaer
в каком месте?
Кабачок
Переделали фид, где отображалась активность зафоловленных аккаунтов, и добавили рекомендации (!)
Кабачок
На главной
Aragaer
а. Чот может и поменялось. Я там задерживаюсь примерно на минуту, чтобы перейти на какой-то из своих репозиториев, когда забыл его точное название. Обычно иду напрямую
Aragaer
и у меня почему-то нет рекомендаций вроде
Aragaer
а, вкладка discover
Cheese
Х-ля нет
можно же взять и дописать внешний инструмент вместо того, чтобы ругать за недостаточную красоту то, что в Хаскелле есть из коробки
Ilya
можно же взять и дописать внешний инструмент вместо того, чтобы ругать за недостаточную красоту то, что в Хаскелле есть из коробки
не ругал, а интересовался. собственно получил удовлетворительный ответ от @greenest_pig и @greenest_pig, что да, есть инструменты для автоматического импорта
Alexander
кто-нить bindings-DSL юзал?
Alexander
т.е. остальные не для автоматического импорта, а просто жизнь немного упрощают
Cheese
Переделали фид, где отображалась активность зафоловленных аккаунтов, и добавили рекомендации (!)
как его переделали? как была бесполезная хрень, так и осталась. не вижу разницы
Кабачок
Теперь там жирные черные буквы и аватарки.
Chris
Сегодня набрел на статью - http://bitemyapp.com/posts/2017-10-06-persistent-ecto-activerecord.html Речь там о Persistent, и мне вспомнилось, что кто-то в этом чате ругал его и говорил, что esqueleto норм. Если мне это не привиделось, то отзовитесь и скажите в чем там проблема и стоит ли боятся его использовать?
Kirill
esqeleto так-то поверх persistent работает, так что камни что в persistent и в его огород можно местами покидать
Kirill
на что недавно нарвался дак https://github.com/bitemyapp/esqueleto/issues/49 - промахнёшься с (обратным) порядком on/join и ошибка придёт только из БД, даже не исключение от Esqueleto
Kirill
а так основная причина того, что пользуем persistent/esqueleto это MySQL, нормальные люди пользуют постгре и у них больше пространство для манёвра :)
Chris
А что постгресс дает, все равно же нужен DSL. Или для постгресса не нужен?)
Kirill
дак говорю - больше пространство
Kirill
ну с ходу могу назвать opaleye и hasql
Kirill
тока pg
Kirill
вроде ещё было что-то под pg и юзабельное
Kirill
но копаем мускул, так что по теме pg я не советчик
Chris
Я довольно плохо ориентируюсь в экосистеме, поэтому opaleye - это открытие для меня, спасибо)
Anonymous
На хаскелл вообще можно без выкрутасов просто кодить, не пытаясь каждый раз описывать программу как математическую модель?
A64m
Можно, но зачем?
Alexander
@raventid я был
Alexander
esqueleto расширяет список запросов, которые можно сделать persistent-ом до минимально разумного уровня
Alexander
что вообще можно смотреть
Alexander
но я вообще не люблю type safe выкрутасы поверх sql и orm
Alexander
обычно это не работает
Kirill
а я наоборот перекатал несколько десятков запросов с mysql-simple на persistent/esqueleto несколько недель назад
Kirill
только вот порядок джойнов расстраивает а так хоть какой-то относительно безопасный код реюз когда общие куски запросов есть
Kirill
но осталась несколько ещё многоэтажных запросов которые не осилил :)
Andrey
esqueleto расширяет список запросов, которые можно сделать persistent-ом до минимально разумного уровня
да, практика показывает, каким бы ни был орм, лучше писать запросы с оптимизацией сразу под задачу
IC
Лучше для какой задачи?
Alexander
Или mysql не оптимайзит такое?
Misha
Или mysql не оптимайзит такое?
Я могу ошибаться, но с джойнами движки обычно делают так. Допустим у тебя есть A join B join C join D 1. Выполняется только то, что запросил: джойнить A и C никто не будет 2. Приоритет всегда расставляется так, что результат — таблица (то есть (A j B) j (C j D) не будет)
Misha
если мне кто-нибудь скажет, что это не так, будет здорово. Могу приложить линк на лекции из уни, но в интернетах пруф пока не нашел (ищу)
Kirill
да кодогенератор не может порядок проверять
Kirill
в обычном сикеле у тебя по тексту идут JOIN а за ним ON
Kirill
в esqueleto же они "оторваны" друг для друга, вроде как для композиционности
Misha
http://www.benjaminnevarez.com/2010/06/optimizing-join-orders/ Вот тут пишут что bushy не пользуются, потому что слишком много вариантов реордеринга
Kirill
в итоге можешь делать JOIN для A и B, а в ON у тебя будут C и D
Kirill
в тикете там всё вроде указано и линка на хаддоки, где ещё Фелипе задокументил косяк
Misha
Alexander
bushy супердорого, да