Guest User

Untitled

a guest
Jun 20th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. data Outer = Outer { _outerMap :: Map String Inner }
  2. data Inner = Inner { _innerMap :: Map Char Int }
  3. makeLenses ''Outer
  4. makeLenses ''Inner
  5.  
  6. example :: Outer
  7. example = Outer $ Map.fromList
  8. [ ("A", Inner $ Map.fromList [ ('a', 1), ('b', 2), ('c', 3) ])
  9. , ("B", Inner $ Map.fromList [ ('a', 4), ('b', 6), ('c', 8) ])
  10. , ("C", Inner $ Map.fromList [ ('a', 5), ('b', 7), ('c', 9) ])
  11. ]
  12.  
  13. >>> example^..outerMap.folded.innerMap.folded.filtered odd
  14. [1,3,5,7,9]
  15.  
  16. >>> example^@..outerMap.folded.innerMap.ifolded.filtered odd
  17. [('a',1),('c',3),('a',5),('b',7),('c',9)]
  18.  
  19. >>> _whatHere example
  20. [(("A",'a'),1),(("A",'c'),3),(("C",'a'),5),(("C",'b'),7),(("C",'c'),9)]
  21.  
  22. >>> example^@..outerMap.ifolded.innerMap.ifolded.filtered odd
  23. [('a',1),('c',3),('a',5),('b',7),('c',9)]
  24.  
  25. >>> example^..outerMap.ifolded.withIndex.alongside id (innerMap.ifolded.filtered odd.withIndex)
  26.  
  27. error:
  28. • No instance for (Applicative
  29. (Control.Lens.Internal.Getter.AlongsideRight
  30. (Const (Data.Monoid.Endo [([Char], (Char, Int))])) [Char]))
  31.  
  32. nolens :: Outer -> [((String, Char), Int)]
  33. nolens =
  34. filter (odd . snd)
  35. . foldMap ((k, i) -> (map (first (k, )) . Map.toList . _innerMap) i)
  36. . Map.toList
  37. . _outerMap
  38.  
  39. >>> example^@..outerMap.ifolded.innerMap<.>ifolded.filtered odd
  40. [(("A",'a'),1),(("A",'c'),3),(("C",'a'),5),(("C",'b'),7),(("C",'c'),9)]
Add Comment
Please, Sign In to add comment