IC
https://hackage.haskell.org/package/microlens это они?
Ilya
а я вчера искал Map Class от Сноймана, тоже не нашёл. Может кто знает, где он? Класс упоминается в конце этой статьи
https://www.yesodweb.com/blog/2016/03/why-i-prefer-typeclass-based-libraries
I've put my Map abstraction classes on Github inside the Jump project.
Видимо раньше они были вот тут https://github.com/commercialhaskell/jump , но проект удалён. В Foundation тоже не нашёл
Alexander
Alexander
а если найдешь то надо послать пулреквест, чтобы удалили
кана
(потому что снойману это нравится, видимо, а то пока безаргументно)
Ilya
из-за того что линзы есть?
Ilya
Alexander
Alexander
и полиморфизм на пустом месте
кана
так вроде чисто ради полиморфизма это и делалось
кана
чтобы не HashMap.insert/ListMap.insert, а просто insert
Alexander
это бесполезный полиморфизм в лучшем случае
Alexander
а ещё иногда и вредный, когда сложность операций становится непредсказуемой
Alexander
и может сильно варьироваться от структуры к структуре
Alexander
в этом отношении подход линз гораздо разумнее
Alexander
беззаконные классы плохо т.к. легко нарушается граница абстракции
Alexander
у таких классов есть плюс - писать бенчмарки проще
Alexander
чтобы сравнить разные реализации структур не меняя код
Влод
А есть какая-то мера когда законов достаточно?
Ilya
Влод
Ну типа напишешь закон с id или const и всё тайпкласс надёжный?
Alexander
когда для методов класса есть инфарианты
кана
полагаю законы должны связывать операторы стуктуры (как дистрибутивность связывает моноиды полукольца)
Alexander
нету законов - точно плохо
Alexander
да
Влод
Такая глупость по моему. Делаешь такой себе полиморфизм, а тебе навязывают что ты должен это делать в стиле матана
Ilya
кана
нет, ни разу
Ilya
(и прочим "матаном")
Влод
Типа 2местный оператор написал и проверяешь его на комутативность, ассоциативность. Лишь бы хоть какое-то свойство
кана
полагаю речь про вещи типа
insert k v2 . insert k v1 = insert k v1
и похоже что не все мапы такое поддерживают
Alexander
Alexander
иначе получается убожество вроде classy lens
Alexander
classy-prelude т.е.
Alexander
и monotraversable
Ilya
кана
ну это просто пример
кана
для интуиции по моему самое то
Влод
Ну типа были введены имена для операции на основе их свойств
Влод
И теперь ты пытаешься дать свойства своей предметной области
Влод
И всё это в языке где это все не проверяется
Влод
Просто воображаешь себя каким то математиком
Влод
Alexander
просто практика показывает, что если этого не придерживаться, то код становится слишком сложным и плохо поддерживаемым
Alexander
если начинает такого хотеться, то с большой долей вероятности, спроектировано не верно
Alexander
хотя я лично не много чего имею против беззаконных классов, и иногда использую, обычно это маркер о том, что в этом месте стоит подумать ещё раз
Alexander
я ещё не люблю когда MonadIO m вместо IO делают
Alexander
но тут трудно найти сторонников
Alexander
но так уж и быть я соглашусь с тем что специализацию для IO сделают
кана
Alexander
Антон
Народ, я тут решаю кату — интерпретатор для brainfuck-подобного языка. У каты есть один нюанс — интепретация программы может закончиться не только после исчерпания команд в программе, но и при выходе каретки за границы памяти. Вопрос: стоит ли делать трансформер монады, чтобы не пробрасывать явно этот short-curcuit вариант, или я уже упарываюсь и задачу можно решить попроще?
кана
а что за ката? По моему во всех катах про бреинфак на хаскеле лента (или ленты, была там ката с 3 лентами) подразумевалась бесконечной
Антон
Зигохистоморфный
интересно, что за ката
Зигохистоморфный
согласен с @kana_sama там в основном кассеты
Антон
Вот: https://www.codewars.com/kata/esolang-interpreters-number-2-custom-smallfuck-interpreter
Зигохистоморфный
Smallfuck :D
Антон
В общем, monad transformer тут — не оверкилл?
кана
нет
Антон
Гм, а свой трансформер тут не нужен — ExceptT — ровно то, что мне требуется
IC
IC
Уже который год жду когда мне придётся свою монадку написать, но нет, всё уже написано до нас.
Антон
кана
кана
зачам там ExceptT все же не ясно
кана
какие исключения
Зигохистоморфный
ну так вот вместо MaybeT можно ExceptT чтобы сказать чего упало
кана
ну так я наоборот выше заменил ExceptT на MaybeT, потому что в задаче не требуется знать причин
кана
только стейт финальный
IC
Ну мало ли что там в задаче. Это же ещё дебажить как-то надо.
кана
так там в принципе вроде только одна причина для ошибки, которую можно явно отдать
кана
ExceptT - не "ровно то, что требуется", хоть возможно то, что будет полезно в некоторых случаях
IC
всегда можно either (const Nothing) Just сделать
IC
https://theam.github.io/tintin/ всем документировать полчаса!