Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data Outer = Outer { _outerMap :: Map String Inner }
- data Inner = Inner { _innerMap :: Map Char Int }
- makeLenses ''Outer
- makeLenses ''Inner
- example :: Outer
- example = Outer $ Map.fromList
- [ ("A", Inner $ Map.fromList [ ('a', 1), ('b', 2), ('c', 3) ])
- , ("B", Inner $ Map.fromList [ ('a', 4), ('b', 6), ('c', 8) ])
- , ("C", Inner $ Map.fromList [ ('a', 5), ('b', 7), ('c', 9) ])
- ]
- >>> example^..outerMap.folded.innerMap.folded.filtered odd
- [1,3,5,7,9]
- >>> example^@..outerMap.folded.innerMap.ifolded.filtered odd
- [('a',1),('c',3),('a',5),('b',7),('c',9)]
- >>> _whatHere example
- [(("A",'a'),1),(("A",'c'),3),(("C",'a'),5),(("C",'b'),7),(("C",'c'),9)]
- >>> example^@..outerMap.ifolded.innerMap.ifolded.filtered odd
- [('a',1),('c',3),('a',5),('b',7),('c',9)]
- >>> example^..outerMap.ifolded.withIndex.alongside id (innerMap.ifolded.filtered odd.withIndex)
- error:
- • No instance for (Applicative
- (Control.Lens.Internal.Getter.AlongsideRight
- (Const (Data.Monoid.Endo [([Char], (Char, Int))])) [Char]))
- nolens :: Outer -> [((String, Char), Int)]
- nolens =
- filter (odd . snd)
- . foldMap ((k, i) -> (map (first (k, )) . Map.toList . _innerMap) i)
- . Map.toList
- . _outerMap
- >>> example^@..outerMap.ifolded.innerMap<.>ifolded.filtered odd
- [(("A",'a'),1),(("A",'c'),3),(("C",'a'),5),(("C",'b'),7),(("C",'c'),9)]
Add Comment
Please, Sign In to add comment