Alexander
я вот считаю твои замечания едкими и неуместными, но при этом я вместо того чтобы ругаться, пытаюсь вытащить из них рациональное зерно
Alexander
(конкретно те замечания, а не в общем)
IC
не мог конечно, чтов первый раз разговор про hpack был
Мой оригинальный поинт всё ещё применим, только не к стеку, а к хпаку.
Alexander
плюс наверное нужно иметь детектор серьезности, и понимать, что любое резкое и абсолютное утверждение не говорится серьезно
Alexander
Мой оригинальный поинт всё ещё применим, только не к стеку, а к хпаку.
мой поинт в том, что если я не выскажусь резко против того, что считаю плохим, то никто и не заметит
Alexander
вот стек я не считаю резко плохим
Alexander
нормальная тулза, которая делает многим удобнее с терпимыми побочными эфыектами
Alexander
а так заметил, и если бы не один пурист, то все бы нормально было
Alexander
тогда не надо следить
IC
мой поинт в том, что если я не выскажусь резко против того, что считаю плохим, то никто и не заметит
Мой поинт в том, что ты в этом набросе резко высказался по поводу вкусовщины. Ямл это просто формат записи модели. То, что из него генерится кабал это детали реализации.
Sergey
@graninas звучит норм. но все же, если рассмотреть мой вариант, с объединением 3 типов ошибок, так не получится? точнее надо будет делать типа newtype UnionError a = UnionError { unError :: a } и везде делать fmapL UnionError правильно?
Alexander
причем приводилось как: "если кто утверждает что yaml это хорошо, т.к. yaml то этот аргумент не работает"
Alexander
сказал я это и.к. если бы я не сделал, то пришел бы любитель hpack и начал бы приводить этот аргумени
Sergey
не получится написать data UnionError = Error | AnotherError | EndError, правильно? потому что по идее слева типы, справа значения, все верно?
Alexander
@qnikst Ты немного агрессивен для админа
Alexander
Сорри, но все-таки мы пытаемся более хорошее общество выстроить
Vladimir
Нефиг выяснением отношений заниматься. Это тупняк бессодержательный по большей части
IC
мой поинт в том, что если я не выскажусь резко против того, что считаю плохим, то никто и не заметит
Пожалуй вот оно - то, от чего у меня сирены взвыли. Давно у нас резкость и громкость аргументов делает их более верными? Я за нормальную аргументацию, а не флеймогонные набросы. Вот. (Извиняюсь перед всеми за мету)
Kirill
Придётся обернуть в констркукторы аля AnotherError AnotherError
хотя AnotherError занят небось, поэтому какой-то AnotheErrorWrapper нужен
Sergey
ну акей, спасибо 😊
Sergey
сильно больно
Sergey
лучше через newtype
Sergey
хотя и менее надежно
Kirill
или просто изначально делать обобщённый тип, если это не мешает
Alexander
Ну можно тайп-класс написать еще, и инстансы сделать для этих типов ошибок. А потом его использовать в комбинаторах.
Alexander
Но зачем, если можно просто комбинатор как я предложил
Kirill
Sergey
тайпкласс это че-то хардкор
Sergey
ну в смысле в данном случае
Sergey
тут же типа такой костыль, отвалилось и отвалилось
Alexander
ну в смысле в данном случае
Конечно. Потому что Show уже для этих типов-ошибок есть, а большего по задаче и не требуется
Sergey
верно
Ilya
ересь
конструктивно:)
кана
но в принципе возможно такое написать
кана
ты покажи свой код, потому что судя по всему у тебя просто ошибка
кана
если с newtype дерайвинг монада выводится, а функтор/аппликатив нет
Ilya
ты покажи свой код, потому что судя по всему у тебя просто ошибка
newtype Index t i = Index {runIndex :: forall a . t a -> i} run :: t a -> Index t i -> i run = flip runIndex instance Monad (Index t) where idx >>= f = Index $ \t -> run t $ f $ run t idx instance Applicative (Index t) where pure i = Index (const i) (<*>) = ap instance Functor (Index t) where fmap = ap . return монада по сути как у ридера (как у функции), но из-за forall вывести не удалось.
Ilya
бинд и pure реализовал руками, (<*>) и fmap вывел из других методов. Чем меньше переписывания одного и того же, тем лучше - мой поинт.
Ilya
если с newtype дерайвинг монада выводится, а функтор/аппликатив нет
и я нигде не говорил, что у меня монада выводится ньюйтайпом!
доня.
кана
доня.
а, всё
доня.
показалось шо констрейнта не хватает
кана
хаскель ленивый, а undecidable кажется убирает проверки какие-то
доня.
но вообще это конечно топ кек
доня.
имплементить функтор на основе имплементации монады которая по идее зависит от имплементации функтора
Ilya
только стрелочкой => и зависит
Ilya
а так, fmap может быть определён в терминах return и bind, и никто не проверяет, что это совпадает с fmap из Functor
Ilya
об этом тут и речь как бы
кана
по идее ты только по конструкторам матчишь можешь, значения типа a внутри использовать не можешь
Ilya
так, а что ты хочешь с таким инстансом делать?
могу. и использую. чуть позже выложу пакет
Ilya
я его тут выкладывал уже полгода назад, но тогда он был proof-of-concept
Ilya
а ща допилил, и собираюсь уже нормально релизнуть
Ilya
на ЛОРе люди просили
Ilya
так, а что ты хочешь с таким инстансом делать?
демо >>> [1..7] !! 1 2 >>> [1..7] !! end 7 >>> [1..7] !! (end-2) 5 >>> [1..7] !! mid 4 >>> drop 13 ['a'..'z'] "nopqrstuvwxyz" >>> drop mid ['a'..'z'] "nopqrstuvwxyz" >>> splitAt mid "Hello World!" ("Hello ","World!") >>> splitAt (mid - 1) "Hello World!" ("Hello"," World!")
кана
а, да, помню
Ilya
ну это так, игрушки всё конечно, при наличии last и прочего
Ilya
не думаю, что много кто будет это реально использовать. но мне сама идея интересна, и решил довести до конца уж
Alexander
@kana_sama я что то не могу найти твой длиннопост с примером фримонад, можешь помочь?
Alexander
кажется нашел кошерный юзкейс для них
кана
https://t.me/kanaflow/96 - это?
Alexander
да, спасибо, даже подписался
кана
единственный юзкейс, который я вижу пока что - останавливаемое выполнение
Alexander
я тут с forkIO балуюсь, хочу сделать асинхронные операции
Alexander
в порядке академического интереса
Alexander
poor man
Alexander
concurrency?
Alexander
ну да, на основе его
Alexander
если что так статья с этим зовётся