Alexander
я вот считаю твои замечания едкими и неуместными, но при этом я вместо того чтобы ругаться, пытаюсь вытащить из них рациональное зерно
Alexander
(конкретно те замечания, а не в общем)
Alexander
плюс наверное нужно иметь детектор серьезности, и понимать, что любое резкое и абсолютное утверждение не говорится серьезно
Alexander
вот стек я не считаю резко плохим
Alexander
нормальная тулза, которая делает многим удобнее с терпимыми побочными эфыектами
Alexander
а так заметил, и если бы не один пурист, то все бы нормально было
Alexander
Alexander
тогда не надо следить
Sergey
@graninas звучит норм. но все же, если рассмотреть мой вариант, с объединением 3 типов ошибок, так не получится? точнее надо будет делать типа
newtype UnionError a = UnionError { unError :: a } и везде делать fmapL UnionError
правильно?
Alexander
Alexander
Alexander
причем приводилось как: "если кто утверждает что yaml это хорошо, т.к. yaml то этот аргумент не работает"
Alexander
сказал я это и.к. если бы я не сделал, то пришел бы любитель hpack и начал бы приводить этот аргумени
Sergey
не получится написать data UnionError = Error | AnotherError | EndError, правильно? потому что по идее слева типы, справа значения, все верно?
Alexander
@qnikst Ты немного агрессивен для админа
Alexander
Сорри, но все-таки мы пытаемся более хорошее общество выстроить
Vladimir
Нефиг выяснением отношений заниматься. Это тупняк бессодержательный по большей части
Kirill
Sergey
ну акей, спасибо 😊
Sergey
сильно больно
Sergey
лучше через newtype
Sergey
хотя и менее надежно
Kirill
или просто изначально делать обобщённый тип, если это не мешает
Alexander
Ну можно тайп-класс написать еще, и инстансы сделать для этих типов ошибок. А потом его использовать в комбинаторах.
Alexander
Но зачем, если можно просто комбинатор как я предложил
Kirill
Sergey
тайпкласс это че-то хардкор
Sergey
ну в смысле в данном случае
Sergey
тут же типа такой костыль, отвалилось и отвалилось
Sergey
верно
Dmitry
кана
Ilya
кана
но в принципе возможно такое написать
кана
ты покажи свой код, потому что судя по всему у тебя просто ошибка
кана
если с newtype дерайвинг монада выводится, а функтор/аппликатив нет
Ilya
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
доня.
кана
доня.
а, всё
доня.
показалось шо констрейнта не хватает
кана
хаскель ленивый, а undecidable кажется убирает проверки какие-то
доня.
но вообще это конечно топ кек
доня.
имплементить функтор на основе имплементации монады которая по идее зависит от имплементации функтора
Ilya
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
не думаю, что много кто будет это реально использовать. но мне сама идея интересна, и решил довести до конца уж
Ilya
Alexander
@kana_sama я что то не могу найти твой длиннопост с примером фримонад, можешь помочь?
Alexander
кажется нашел кошерный юзкейс для них
кана
https://t.me/kanaflow/96 - это?
Alexander
да, спасибо, даже подписался
кана
единственный юзкейс, который я вижу пока что - останавливаемое выполнение
Alexander
я тут с forkIO балуюсь, хочу сделать асинхронные операции
Alexander
в порядке академического интереса
Alexander
poor man
Alexander
concurrency?
Alexander
ну да, на основе его
Alexander
если что так статья с этим зовётся