кана
хм, в кметовской либе какой-то свой Const, который еще каинд принимает. А, не, не принимает, просто полиформен по нему Const k a (b :: k) :: forall k. * -> k -> *
кана
Часто вижу, что в доке (hackage), часто не бывает ссылки на source какого либа определения (будь то тип, инстанс, функция)
кана
Почему так?
кана
Для того же Const https://hackage.haskell.org/package/lens-4.15.4/docs/Control-Lens-Getter.html#t:Const
Кабачок
Открой сорцы и посмотри, Const не там определен.
кана
Да, я это знаю, я видел. В том же и вопрос, как он экспортирует их, как он попал в доку, если нет сорцов для этого Const?
Кабачок
Какая-то профессиональная haddoc-магия
Vasiliy
самый простой пример траверсала - traverse
кана
Да, только он чет не композируется с моими линзами
кана
потому что view работает не с линзами, а геттерами, сейчас я пытаюсь ввести эти гетеры
Vasiliy
нормально должен композироваться
Vasiliy
> let view l = getConst . l Const > view (traverse._2) [(10, "hello"), (20, " "), (30, "world")] "hello world"
Vasiliy
не забывай только, что то, на что оно указывает, должно быть моноидом
кана
у меня ругается, что нет моноида для чисел (я хочу список чсел полчить)
кана
ну обычно дока все равно указывает, откуда это импортировано, не?
Vasiliy
вот если бы ещё сообщения об ошибках в линзах можно было сделать подружелюбнее, было бы супер
Vasiliy
линза указывает на одно значение, поэтому достаточно обычного Const, траверсал указывает на сколько угодно значений, чтоб их собрать нужен аппликатив
Зигохистоморфный
это понятно)
Кабачок
у меня ругается, что нет моноида для чисел (я хочу список чсел полчить)
для чисел нету дефолтного моноида (потому что для них есть сразу два)
Зигохистоморфный
кстати про зум
Зигохистоморфный
Lens.Zoom
Vasiliy
Const a b - аппликатив, когда a - моноид
Зигохистоморфный
кто знает про это?)
Vasiliy
выбирая моноид можно определять, что мы получим в итоге
Vasiliy
кто знает про это?)
а что про него знать?
Зигохистоморфный
юзкейс
Vasiliy
есть некоторый MonadState a x, есть некоторый MonadState s x, причём a - часть s
Vasiliy
zoom позволяет их соединить
Зигохистоморфный
а получить список чисел можно так [(10, "hello"), (20, " "), (30, "world")] ^..traverse._1
Vasiliy
конкретно в моём случае был magnify, соответственно, вместо MonadState был MonadReader
Vasiliy
в ридере большой конфиг, который состоит из "подконфигов", соответственно, функция, которая по этому конфигу настраивает некоторую систему, вовсю использует функции, работающие с подконфигами, с помощью magnify
Зигохистоморфный
Vasiliy
что-то типа setupStand = do magnify server setupServer; magnify client1 setupClient; magnify client2 setupClient
Vasiliy
по-моему, у габриэля в статье про императивное программирование с линзами есть примеры зума
Vasiliy
вот в этой http://www.haskellforall.com/2013/05/program-imperatively-using-haskell.html
кана
Понял, откуда там в траверсе взялся Mononid. Это у Конста есть инстанс Аппликатива при условии, что параметр - моноид
Vasiliy
значит, теперь не составит труда написать toListOf
Vasiliy
также известный как (^..)
кана
Вопрос по реализации аппликативного конста - почему он так странно написан? (<*>) = coerce (mappend :: m -> m -> m) Когда можно было вот так: (<*>) (Const a) (Const b) = Const (a <> b)
Anonymous
может быстрее?
Зигохистоморфный
коерц это как раз делает без переупаковок
Зигохистоморфный
кстати можно определить foldMapOf а из него view :D
Зигохистоморфный
view l = foldMapOf l id
Зигохистоморфный
О!
Зигохистоморфный
я вспомнил о одной кате
Зигохистоморфный
https://www.codewars.com/kata/lensmaker/haskell
Anonymous
каты это типо наборы заданий?
Зигохистоморфный
ну да
Влод
как-то странно в таком месте вдруг за перфоманс взяться
Влод
https://www.codewars.com/kata/lensmaker/haskell
так а всё что там есть это дескрипшон?
Anonymous
https://www.codewars.com/kata/lensmaker/haskell
мб знаешь еще хороших кат(ов) по хаскелю тогда?
Зигохистоморфный
ага по рекурсивным схемам
Anonymous
о
Anonymous
давай
Зигохистоморфный
https://www.codewars.com/kata/54f1fdb7f29358dd1f00015d https://www.codewars.com/kata/54289bfc929cdbbbfd000213 https://www.codewars.com/kata/547a77a6b84a1fb8bf000211 https://www.codewars.com/kata/51ba717bb08c1cd60f00002f https://www.codewars.com/kata/555b1890a75b930e63000023 https://www.codewars.com/kata/5424e3bc430ca2e577000048 https://www.codewars.com/kata/526156943dfe7ce06200063e
Vasiliy
мб знаешь еще хороших кат(ов) по хаскелю тогда?
Можно задачки project Euler и hackerrank порешать
Vasiliy
Детям и девушкам можно посоветовать codingame
кана
Окей, с траверсами было не сложно разобраться таким способом: для начала я написал traverse' максимально под мой юзкейс, без единой тайплевел переменной. Потом потихоньку обобщал до максимума
Artyom
ну тут не до максимума обобщено, если что
кана
Да, еще можно Applicative использовать
Artyom
ага, ок
Зигохистоморфный
так можно и обычный traverse юзать?
Artyom
ага
кана
Можно, а что?
Artyom
@xgrommx traverse – это полноценный травёрсал в van laarhoven линзах (а в профункторных, например – нет) (и Кметт всегда говорит, что мол конечно профункторные линзы хорошо, но круто ведь, что traverse – это травёрсал, и что можно определять травёрсалы без lens)
Alexander
о Артём вернулся
Artyom
@qnikst ага, я вышел, потому что чатик чуток сильно бесконечно отвлекал
Artyom
@xgrommx а какую часть не понял? 😉
Alexander
иногда думаю делать так же
Зигохистоморфный
@xgrommx а какую часть не понял? 😉
что профункторные линзы не работают с traverse обычным?
Artyom
ну traverse хочет функцию, а профункторные линзы должны работать с любым профунктором
Artyom
вообще, в профункторных линзах: • линзы простые • призмы простые • а вот травёрсалы какие-то очень непростые, я даже не начинал разбираться
Artyom
если хочется почитать, то либо http://oleg.fi/gists/posts/2017-04-18-glassery.html#traversal, либо https://hackage.haskell.org/package/mezzolens
Кабачок
Что означает rating 2.0 и/или λ λ λ?