Moduleoptics-core-0.4.1.1Haskell2010
Data.List.Optics
Additional optics for manipulating lists are present more generically in this package.
The Ixed class allows traversing the element at a specific list index.
[0..10] ^? ix 4Just 4
[0..5] & ix 4 .~ 2[0,1,2,3,2,5]
[0..10] ^? ix 14Nothing
[0..5] & ix 14 .~ 2[0,1,2,3,4,5]
The Cons and AsEmpty classes provide Prisms for list constructors.
[1..10] ^? _ConsJust (1,[2,3,4,5,6,7,8,9,10])
[] ^? _ConsNothing
[] ^? _EmptyJust ()
_Cons # (1, _Empty # ()) :: [Int][1]
Additionally, Snoc provides a Prism for accessing the end of a list. Note that this Prism always will need to traverse the whole list.
[1..5] ^? _SnocJust ([1,2,3,4],5)
_Snoc # ([1,2],5)[1,2,5]
Finally, it's possible to traverse, fold over, and map over index-value pairs
thanks to instances of Optics.Indexed.Core.TraversableWithIndex,
Optics.Indexed.Core.FoldableWithIndex, and
Optics.Indexed.Core.FunctorWithIndex.
imap (,) "Hello"[(0,'H'),(1,'e'),(2,'l'),(3,'l'),(4,'o')]
ifoldMap replicate "Hello""ellllloooo"
itraverse_ (curry print) "Hello"(0,'H')(1,'e')(2,'l')(3,'l')(4,'o')
- 2 values
- Packageoptics-core-0.4.1.1
- Exports2
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceOptics.hs