Ayrat
Нет в тебе исследовательского духа, Айрат!
А ты знал что билдеры в фшарпе можно наследовать? Вот НИГДЕ этой казалось бы очевидной инфы не было
Shub
Нет, не знал! Это интересно.
это ж просто класс, конечно же он наследуется
Dr. Friedrich
это ж просто класс, конечно же он наследуется
Ну, на самом деле да. Теперь, когда это упомянули, я не вижу препятствий для того, чтобы это работало.
Ayrat
это ж просто класс, конечно же он наследуется
Звучит очевидно, но почему никто не делал
Dr. Friedrich
Но просто как-то не приходило в голову наследовать.
Dr. Friedrich
Звучит очевидно, но почему никто не делал
Я пока не представляю себе полезного применения этому удивительному свойству.
Dr. Friedrich
Но, может быть, оно и есть.
Dr. Friedrich
Можно же и интерфейсы объявлять на билдерах, так?
Dr. Friedrich
И даже писать генерик код, который будет работать для любого билдера, удовлетворяющего интерфейсу.
Dr. Friedrich
Правда?
Ayrat
Я пока не представляю себе полезного применения этому удивительному свойству.
Недавно меня просили сделать ДСЛ для конфигурации, вот там пригодилось
Dr. Friedrich
Ну вот тебе, бабушка, и монадический трансформатор!
Dr. Friedrich
приходилось когда-нибудь возвращать Result из Async?
Думаю, да. Но пока не понял, к чему ты клонишь.
Dr. Friedrich
https://alpacaaa.net/thoughts-on-haskell-2020/ о, смотрите, там DI по-хаскельному делают
Vladislav
Doge
И? Так более мне нормальный набор расширений. Хаскель без расширений - деньги на ветер
Dr. Friedrich
Вот чонить из этого перегруженные функции заменит мне?
Dr. Friedrich
Вроде можно было геттеры у дата классов перегружать
Dr. Friedrich
А про норм функции я не припомню.
Doge
Вот чонить из этого перегруженные функции заменит мне?
Если ты хочешь функцию с одним именем использовать для разных типов, то тайпклассы
Dr. Friedrich
Сперва рассказывают, какой клёвый супер абстрактный язык без бойлерплейта
Dr. Friedrich
А потом он весь переполнен бойлерплейтом!
Dr. Friedrich
Буду негодовать, покуда не сделают.
Dr. Friedrich
OverloadedStrings не хватает, кстати
Dr. Friedrich
Вот это точно Ъ полезное расширение
Dr. Friedrich
Впрочем, полезное оно скорее потому, что дефолтовое поведение Ъ бесполезно сделано :)
Dr. Friedrich
Заметили, да? Перегрузка — хорошо!
Андрей
Почти всем выписывают связку из седативных препаратов и ингибиторов захвата серотонина
если серотонин перехватить, это что, один мелатонин останется? Так и до депрессий и суицида недалеко
Диёр
серотонина больше становится
Диёр
в этом весь смысл связки: пьёшь седативные чтоб в окно не вышел и серотонин повышаешь чтобы после отмены седативных не захотелось выйти в окно
Диёр
а потом психотерапию назначают когда с тобой уже можно работать
Doge
Хочу. Но не хочу тайпклассы, слишком вербозно
Там вербозность в одном объявлении в одну-две строки.
Dr. Friedrich
Там вербозность в одном объявлении в одну-две строки.
Нелокальность ещё получается, очень некрасиво
Dr. Friedrich
Получается, что моя возможность объявить перегрузочку ещё вот туточки зависит от какого-то хрена с горы, который объявил тайпкласс
Dr. Friedrich
К тому же, кажется, это целое объявление инстанса тайпкласса на каждую перегрузку?
Dr. Friedrich
Для меня это звучит значительно более фундаментально, чем я себе представляю, когда говорю «перегрузка функции».
Dr. Friedrich
Ну то есть я не утверждаю, что язык плохой или что-то в этом роде, нет
Dr. Friedrich
Просто, гмгм, неудобно
Dr. Friedrich
Да и самим разрабам неудобно
Dr. Friedrich
Поэтому они придумывают всякие смешные сокращения типа forM_
Dr. Friedrich
Вроде там подчёркивание тоже что-то значит, типа, это перегрузка для IO (), ага?
Doge
Просто, гмгм, неудобно
Как-то не замечал неудобств в хаскеле именно вокруг этого момента. Не критичная вещь. Проблема с рекордами там куда хуже
Doge
Вроде там подчёркивание тоже что-то значит, типа, это перегрузка для IO (), ага?
Так это разница в возвращаемом типе. Перегрузки тут не спасут, даже если были бы.
Dr. Friedrich
Вот с выводом всякого по возвращаемым типам там же вообще прекрасно, без шуток
Dr. Friedrich
Ну, типа 1 это не Int, а чёрт знает что
Dr. Friedrich
Number?
Dr. Friedrich
И оно потом норм умеет выбирать, к какому типу его скастовать в зависимости от того, в какие функции я его передаю
Dr. Friedrich
Но на самом деле меня в хаскеле супер бесит trace
Dr. Friedrich
Чтобы чот потрейсить, приходится сильно переписывать код
Dr. Friedrich
И он выглядит ущербно
Dr. Friedrich
А потом, чтобы убрать трейсинг, приходится его переписывать обратно!
Doge
В Хаскеле могли бы и спасти!
Так эти функции типа forM_ нужны чтобы тупо потом не писать какой-нибудь void, чтобы к юниту привести.
Dr. Friedrich
Это прям так больно и неудобно что срам
Doge
Но на самом деле меня в хаскеле супер бесит trace
А зачем руками трейсить, если есть отладчик?
Dr. Friedrich
Каждый раз очень много времени трачу на то, чтобы добавлять/убирать трейсы в разных местах программы, могли бы и поудобнее сделать :(
Dr. Friedrich
Doge
А какой там есть отладчик?
Обычный отладчик, встроен в GHCI.
Dr. Friedrich
Не понимаю.
Dr. Friedrich
Брейкпоинт как поставить? И приаттачиться?
Dr. Friedrich
Или можно как-то прям под дебагом запустить прогу? Тогда только брейкпоинт расскажите!
Doge
Брейкпоинт как поставить? И приаттачиться?
https://downloads.haskell.org/~ghc/7.6.3/docs/html/users_guide/ghci-debugger.html
Dr. Friedrich
Окей, супер!
Dr. Friedrich
А гуй есть к нему? Ну хоть какой
Dr. Friedrich
Я понимаю, что нормального, скорее всего, нету
Doge
А гуй есть к нему? Ну хоть какой
Вот с этим как обычно. Может есть для всяких емакс плагинов, но не уверен.
Dr. Friedrich
https://github.com/rikvdkleij/intellij-haskell/issues/105 вот сюда надо прикрутить им
Dr. Friedrich
И тогда прям ваще заживём
Dr. Friedrich
intellij-haskell в принципе, вот вообще, с жуткими матюгами, но юзабельно
Doge
intellij-haskell в принципе, вот вообще, с жуткими матюгами, но юзабельно
Тупит разве что, но по уровню тупизма есть официальные плагины которые сильно хуже
Dr. Friedrich
У них там есть какая-то переменная для таймаута ghci
Dr. Friedrich
И мне приходилось её тюнить и ставить на пять часов вместо пяти минут