| Copyright | (C) 2014-2016 Edward Kmett | 
|---|---|
| License | BSD-style (see the file LICENSE) | 
| Maintainer | Edward Kmett <ekmett@gmail.com> | 
| Stability | experimental | 
| Portability | non-portable | 
| Safe Haskell | Safe | 
| Language | Haskell98 | 
Data.Map.Lens
Description
One of most commonly-asked questions about this package is whether
 it provides lenses for working with Map. It does, but their uses
 are perhaps obscured by their genericity. This module exists to provide
 documentation for them.
Map is an instance of At, so we have a lenses
 on values at keys:
>>>Map.fromList [(1, "world")] ^.at 1Just "world"
>>>at 1 .~ Just "world" $ Map.emptyfromList [(1,"world")]
>>>at 0 ?~ "hello" $ Map.emptyfromList [(0,"hello")]
We can traverse, fold over, and map over key-value pairs in a
 Map, thanks to its TraversableWithIndex,
 FoldableWithIndex, and
 FunctorWithIndex instances.
>>>imap const $ Map.fromList [(1, "Venus")]fromList [(1,1)]
>>>ifoldMap (\i _ -> Sum i) $ Map.fromList [(2, "Earth"), (3, "Mars")]Sum {getSum = 5}
>>>itraverse_ (curry print) $ Map.fromList [(4, "Jupiter")](4,"Jupiter")
>>>itoList $ Map.fromList [(5, "Saturn")][(5,"Saturn")]
A related class, Ixed, allows us to use
 ix to traverse a value at a particular key.
>>>ix 2 %~ ("New " ++) $ Map.fromList [(2, "Earth")]fromList [(2,"New Earth")]
>>>preview (ix 8) $ Map.emptyNothing
Additionally, Map has TraverseMin and
 TraverseMax instances, which let us traverse over
 the value at the least and greatest keys, respectively.
>>>preview traverseMin $ Map.fromList [(5, "Saturn"), (6, "Uranus")]Just "Saturn"
>>>preview traverseMax $ Map.fromList [(5, "Saturn"), (6, "Uranus")]Just "Uranus"
- toMapOf :: IndexedGetting i (Map i a) s a -> s -> Map i a
 
Documentation
toMapOf :: IndexedGetting i (Map i a) s a -> s -> Map i a Source #
Construct a map from a IndexedGetter, IndexedFold, IndexedTraversal or IndexedLens
The construction is left-biased (see union), i.e. the first
 occurences of keys in the fold or traversal order are preferred.
>>>toMapOf folded ["hello", "world"]fromList [(0,"hello"),(1,"world")]
>>>toMapOf (folded . ifolded) [('a',"alpha"),('b', "beta")]fromList [('a',"alpha"),('b',"beta")]
>>>toMapOf (folded <.> folded) ["foo", "bar"]fromList [((0,0),'f'),((0,1),'o'),((0,2),'o'),((1,0),'b'),((1,1),'a'),((1,2),'r')]
>>>toMapOf ifolded $ Map.fromList [('a', "hello"), ('b', "world")]fromList [('a',"hello"),('b',"world")]
toMapOf::IndexedGetteri s a -> s ->Mapi atoMapOf::Ordi =>IndexedFoldi s a -> s ->Mapi atoMapOf::IndexedLens'i s a -> s ->Mapi atoMapOf::Ordi =>IndexedTraversal'i s a -> s ->Mapi a