Alexander
существует куча неудачных классических примеров :(
Alexander
особенно в хаскеле
Alexander
я раскрою мысль, мне кажется из примера по хорошему должно следовать, что самый сложный по построению вариант лучше
Alexander
а то люди приходят, смотрят и не понимают "а зачем было делать на фримонадах"
кана
Так как тайпклассы это просто неявнопередающиеся словарики (почти), то я добавил четвертый вариант - tagless final via record. Из фишек - можно делать разные "инстансы" на одни и те же монады. Из минусов - нужно явно пробрасывать словарик. https://gist.github.com/kana-sama/6fc14ce18bc10303a36c047fbf36a043#file-4-tagless-final-record-hs
Alexander
мне кстати фримонады напомнили эрланг чем то
Alexander
что мы теряем?
возможность специализации и отсуствия indirection если это важно
Alexander
но в целом я такой подход предпочитаю
кана
возможность специализации и отсуствия indirection если это важно
можно подробнее про специализацию и inderection?
Alexander
в Data { foo:: ...} у нас indirection и вызов неизвестной функции
Alexander
мы не можем взять и заинлайнить её, и оптимизировать как может с классами типов
A64m
вообще-то этот подход с передачей словаря нормально оптимизируется
кана
@JelF1337 кстати, а что вы считаете удачным примером фри-монад? Такой, где нужно выполнение приостанавливать и восстанавливать?
Alexander
А мне самому интересно
Alexander
у нас такое было, но с operational вместо free
Alexander
там были стейтмашинки и их выполнято
Alexander
машинки могли останавливаться на ожидании событий и происходила передача управлени
кана
у нас такое было, но с operational вместо free
посмотрел, это же и есть freer
Alexander
in disguise
Anatolii
так, я начинаю не любить кастомные прелюды
Anatolii
обновил Universum и пришлось править проект
Anatolii
#129: Reexport id. - гора варнингов потому что начал юзать id для простых id #136: Change foldl' type back, add flipfoldl' instead. - поменяли местали аргументы :(
Alexander
136 же sedом чинится?
Quet
а зачем они реэкспортят id? вообще это конечно была плохая идея так функцию называть из прелюдии
Anatolii
я тоже не понял зачем сначала было убирать id
Anatolii
а потом возвращать
Anatolii
https://github.com/serokell/universum/issues/129
Anatolii
причина конечно так себе
Quet
не, зачем убирать понятно
Quet
точнее делать identity вместо id
Quet
но зачем возвращать...
Anatolii
This is more user friendly.
Anatolii
я конечно могу hiding делать
Anatolii
но это уже какое-то прелюда над прелюдой начнет собираться
Anatolii
какой-то сегодня тяжедый день, типы что-то не выводятся у персистанта, не могу по айди достать сущность
Anatolii
навреное надо спать идти
A64m
за что универсум любить-то? Это же адище
A64m
предлагаю использовать обычную прелюдию с батарейками из lens
Arseniy
Cc @chshersh
A64m
это же в юниверсуме туплоборчество? Хороший признак, что автор альтпрелюдии поехавший
Quet
обычная прелюдия это где String везде где нужны строки? )
Quet
отличный вариант
Anatolii
Cc @chshersh
зачем поломали id и fold? :)
Arseniy
Ой не спрашивай...
Arseniy
Сами в шоке...
Anatolii
ну просто когда открываешь issue с id - оч смешная причина
A64m
да, точно, именно в универсуме https://github.com/serokell/universum/blob/master/src/Universum/Container/Class.hs#L15
кана
identity - очень хорошее решение было
Anatolii
A64m
абсолютно ничего хорошего
A64m
просто ломатель уже написанного кода с 0 пользой от этого
Quet
много написанного кода использует id? 🙂
Alexander
Там MIT лицензия
Alexander
берешь и форкаешь ©
кана
просто ломатель уже написанного кода с 0 пользой от этого
когда используют кастомную прелюдию, то обычно пишут новый проект, поэтому там сразу identity
Anatolii
просто ломатель уже написанного кода с 0 пользой от этого
в старый код никто не будет кастомную прелюду тащить
A64m
вот из-за таких фантазий прелюдии негодные и выходит
Anatolii
вот начать выпиливать "потому что не юзер-френдли" точно странное рещение
Quet
гораздо удобнее иметь возможность называть переменные id ) чем поддерживать какой-то мифический старый код который все равно надо переписывать чтобы он завелся с новой прелюдией
A64m
"альтернативная" "прелюдия" должна с существующей стыковаться без проблем, как lens чтоб про нее даже никто как про альтернативную прелюдию и не думал
Quet
это немного убивает весь смысл
A64m
немного убивает. а нестыкующаяся убивает в основном
A64m
особенно когда нестыковки изобретают ради нестыковок со смешной мотивацией
Quet
нестыковки это побочный эффект того что делают нормальный api
Quet
сделать нормальный api не меняя api это бред какой-то
Alexander
можно менять API в мажорных релизах и обеспечивать LTS, а можно сразу херачить все в мастер
A64m
так не делают же. там примерно все то же, только из-за угла иногда на тебя выскакивает очередной продукт Дилевых кошмаров
кана
id в изначальной прелюдии это очевидно далеко не самое удачное решение для индустриального языка, это можно назвать ошибкой поддерживать ошибку из-за легаси - такое
A64m
когда что-то снуля нормально спроектировано по другому - это понятно, там буквально в паре мест резьба левая и всякий раз думаешь wtf?
Quet
там половина прелюдии это "не самое удачное решение" и именно поэтому обеспечить совместимость api это утопия какая-то
Alexander
а Foundation норм, кстати?
Alexander
я вот думаю что пора валить с прелюдии но не придумал куда
кана
наверное, сбор своей прелюдии почти всегда окажется лучшим решением, так как в любой будет что-то не нравиться
кана
можно делать как в пурсе и просто не использовать прелюдию вообще, каждый раз все импортировать
A64m
прелюдия плохая в основном тем, что там ничего нет, а из проблемного там строки только, ну так нормальных строк в хаскеле не изобрели еще все равно