A64m
или траверсала, к примеру
A64m
A64m
что неправильного в коде типа fold (Just 2) :: Sum Int
Cheese
A64m
A64m
Cheese
вы игнорируете суть проблемы — свёртку в призме
A64m
чего?
Cheese
в призме не может быть свёртки
A64m
чего?
A64m
призма - это траверсал
A64m
траверсал тоже нельзя свертывать штоле?
A64m
что тогда можно свертывать-то вообще?
Cheese
A64m
чего?
Cheese
A64m
т.е. вам не нарвится что призма - это траверсал?
Cheese
да
A64m
но почему?
Cheese
в частности, это тоже
Cheese
траверсал может найти 2 результата, а призма не может
Cheese
поэтому призма не может зависеть от Semigroup
A64m
она и не зависит, зависит сверка, как иначе сворачивать-то
кана
то, что призма как-то завязана на траверсал, выглядит как деталь реализации линз, протекшей абстракцией
Cheese
нужен {-# LANGUAGE NoHarmfulInstances #-}
Cheese
A64m
нету, вы применили свертку к ней
Cheese
A64m
поскольку призма может указывать, а может не указывать на что-то с инстансом моноида - свертка удалась
A64m
не правда, применили
A64m
lens, mezzolens:
λ> Nothing ^. _Just :: String
""
optics:
λ> Nothing ^. _Just
<interactive>:4:1: error:
• No instance for (Is A_Prism A_Getter) arising from a use of ‘^.’
Cheese
так это же код с ошибкой
A64m
Cheese
нет, я применил view, но не fold
A64m
так это же код с ошибкой
если вы считаете что код в котором вы применяете свертку "с ошибкой" - это не значит, что вы свертку не применили
Big Bux Chungus
но не иметь instance Traversable Maybe было бы очень грустно
A64m
чего?
Cheese
A64m
я бы сказал, что иерархия оптики - обязательная фича, все либы без нее не взлетели
Cheese
A64m
но любая фича "иногда вредная", с помощью чего угодно можно написать код, который вы не хотели писать
A64m
т.е. буквально, нету вообще никаких исключений
Алексей
data Foo a = Foo { field :: Map Int (Maybe a), .. } deriving (Foldable,Traversable)
A64m
и писать не тот код, который вы хотели с помощью функций про которые вы не знаете - вообще очень легко
Алексей
А дальше плач и скрежет зубовный без инстансов для Maybe
Алексей
С парами та же история, кстати
Cheese
A64m
ну, говорить что инстансы для пар не нужны, это следуюший уровень после говорения что id и const не нужны
A64m
без "подтипирования" оптики слишком убого все, и для автора библиотеки и для пользователя
A64m
это проблема всех этих liftM и liftA и sequence sequenceA только умноженная в 100 раз
Cheese
A64m
liftM
Cheese
можно им просто не пользоваться. вреда такого не приносят, как сворачивание пар
A64m
так приходилось пользоваться, пока "подтипирование" монад и аппликативов не ввели
A64m
но если до AMP дублирование кода еще можно было потянуть, то с гексированием кода уже не так весело
Cheese
A64m
A64m
в обоих случаях примерно одинаковое подтипирование же
A64m
это буквально одна и та же проблема в разных либах просто
A64m
не было бы ее, и AMP бы не делали
Alexander
а new-dist уже завезли?
Alexander
чот не удобно, приходится cabal sdist делать, которому нужно старым методом зависимости
A64m
да
NC
Сегодня аж пригодился guide.aelve.com, посмотреть про CPP магию кабала
Alexander
где там магия?
Alexander
мин вершоны, версия компилятора и это все?
NC
Ага, наизусть то не помню уже
NC
а по манам кабала не гуглится
Alexander
оно грепается по dist/build
Alexander
если знать что оно вообще есть
A64m
хорошие слайды у доклада по generic-lens
Alexander
"да" как в завезли?
A64m
да, завезли в 2.4
A64m
(я, правда, им не пользовался, может там какие-то подводные грабли есть)