A64m
или траверсала, к примеру
A64m
что неправильного в коде типа fold (Just 2) :: Sum Int
Cheese
это не чтение из линзы это сворачивание результата призмы
да, чтение из призмы, описка. там нечего сворачивать. результат либо есть, либо нет
A64m
да, чтение из призмы, описка. там нечего сворачивать. результат либо есть, либо нет
как это нечего сворачивать если результата либо нет либо он есть?
A64m
не уходите от призм
а в чем разница?
Cheese
вы игнорируете суть проблемы — свёртку в призме
A64m
чего?
Cheese
в призме не может быть свёртки
A64m
чего?
A64m
призма - это траверсал
A64m
траверсал тоже нельзя свертывать штоле?
A64m
что тогда можно свертывать-то вообще?
A64m
чего?
Cheese
траверсал тоже нельзя свертывать штоле?
опять неправильное следствие
A64m
т.е. вам не нарвится что призма - это траверсал?
Cheese
да
A64m
но почему?
Cheese
в частности, это тоже
Cheese
траверсал может найти 2 результата, а призма не может
Cheese
поэтому призма не может зависеть от Semigroup
A64m
она и не зависит, зависит сверка, как иначе сворачивать-то
A64m
траверсал может найти 2 результата, а призма не может
траверсал может не найти ни одного результата, призма тоже
кана
то, что призма как-то завязана на траверсал, выглядит как деталь реализации линз, протекшей абстракцией
Cheese
нужен {-# LANGUAGE NoHarmfulInstances #-}
A64m
нету, вы применили свертку к ней
Cheese
траверсал может не найти ни одного результата, призма тоже
это опревергает случай 2 элементов? может, вы хотите сказать, что Maybe — частный случай []?
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
так это же код с ошибкой
Cheese
нет, я применил view, но не fold
A64m
так это же код с ошибкой
если вы считаете что код в котором вы применяете свертку "с ошибкой" - это не значит, что вы свертку не применили
A64m
нет, я применил view, но не fold
ну fold к оптике не применяется, там другая функция для этого определена
Cheese
поскольку призма может указывать, а может не указывать на что-то с инстансом моноида - свертка удалась
не следует из Maybe требование свёртки. даже instance Foldable Maybe не использует Semigroup, а только mempty, а значит беззаконный
Big Bux Chungus
но не иметь instance Traversable Maybe было бы очень грустно
A64m
чего?
A64m
я бы сказал, что иерархия оптики - обязательная фича, все либы без нее не взлетели
Cheese
но не иметь instance Traversable Maybe было бы очень грустно
не согласен. хоть один пример, пожалуйста
A64m
но любая фича "иногда вредная", с помощью чего угодно можно написать код, который вы не хотели писать
A64m
т.е. буквально, нету вообще никаких исключений
Алексей
data Foo a = Foo { field :: Map Int (Maybe a), .. } deriving (Foldable,Traversable)
A64m
и писать не тот код, который вы хотели с помощью функций про которые вы не знаете - вообще очень легко
Алексей
А дальше плач и скрежет зубовный без инстансов для Maybe
Алексей
С парами та же история, кстати
Cheese
я бы сказал, что иерархия оптики - обязательная фича, все либы без нее не взлетели
но они таки были реализованы. а не взлететь можно по множеству причин
A64m
ну, говорить что инстансы для пар не нужны, это следуюший уровень после говорения что id и const не нужны
A64m
но они таки были реализованы. а не взлететь можно по множеству причин
их где-то с десяток не взлетело, а взлетели только такие вот полиморфные, так что похоже, что это одна из причин все-таки
A64m
без "подтипирования" оптики слишком убого все, и для автора библиотеки и для пользователя
A64m
это проблема всех этих liftM и liftA и sequence sequenceA только умноженная в 100 раз
A64m
liftM
Cheese
можно им просто не пользоваться. вреда такого не приносят, как сворачивание пар
A64m
так приходилось пользоваться, пока "подтипирование" монад и аппликативов не ввели
A64m
но если до AMP дублирование кода еще можно было потянуть, то с гексированием кода уже не так весело
Cheese
так приходилось пользоваться, пока "подтипирование" монад и аппликативов не ввели
из этого следует, что любое подтипирование хорошо? вы сегодня король силлогизмов!
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
(я, правда, им не пользовался, может там какие-то подводные грабли есть)