Бих искал да задам стойност в карта на 2 нива - т.е. към ключ в карта, който е стойност за някакъв ключ във "външна" карта. За обикновена карта бих могъл да използвам нещо като m & at 42 ?= "value"
Но не можах да намеря никакъв начин за влагане на 2 at
Кой е най-лесният начин да задам такава вложена стойност с помощта на lens?
Възможно ли е да гнездите `at` със сетери?
Отговори (2)
Потребителският капак показа, че има по-добро решение - http://juick.com/qrilka/2602819#19 и е точно в библиотеката с обективи: не
person
Qrilka
schedule
04.12.2013
Един вид, можем да използваме _Just
призмата, която няма да работи, ако няма наличен ключ. Това има неприятния ефект, че не можем да създадем ключове 2 слоя надолу. Но като пример
at2 :: Ord k => k -> k -> IndexedTraversal' k (Map k (Map k v)) (Maybe v)
at2 k1 k2 = at k1 . _Just . at k2
person
Daniel Gratzer
schedule
04.12.2013
Може би е възможно да се използва
maybe
(или неговия аналог на обектива)? В момента изглежда, че изричното създаване на нова подкарта трябва да изглежда малко по-добре
- person Qrilka; 04.12.2013