Copyright | (C) 2012-16 Edward Kmett |
---|---|

License | BSD-style (see the file LICENSE) |

Maintainer | Edward Kmett <ekmett@gmail.com> |

Stability | provisional |

Portability | non-portable |

Safe Haskell | Trustworthy |

Language | Haskell2010 |

This module provides lenses and traversals for working with generic vectors.

# Documentation

# Isomorphisms

vector :: Iso [a] [b] (Vector a) (Vector b) Source #

Convert a list to a `Vector`

(or back)

`>>>`

True`[1,2,3] ^. vector == Vector.fromList [1,2,3]`

`>>>`

[1,2,3]`[1,2,3] ^. vector . from vector`

`>>>`

True`Vector.fromList [0,8,15] ^. from vector . vector == Vector.fromList [0,8,15]`

forced :: Iso (Vector a) (Vector b) (Vector a) (Vector b) Source #

Convert a `Vector`

to a version that doesn't retain any extra
memory.

# Lenses

`sliced i n`

provides a `ReifiedLens`

that edits the `n`

elements starting
at index `i`

from a `ReifiedLens`

.

This is only a valid `ReifiedLens`

if you do not change the length of the
resulting `Vector`

.

Attempting to return a longer or shorter vector will result in
violations of the `ReifiedLens`

laws.

`>>>`

True`Vector.fromList [1..10] ^. sliced 2 5 == Vector.fromList [3,4,5,6,7]`

`>>>`

True`(Vector.fromList [1..10] & sliced 2 5 . mapped .~ 0) == Vector.fromList [1,2,0,0,0,0,0,8,9,10]`

# Traversal of individual indices

ordinals :: [Int] -> IndexedTraversal' Int (Vector a) a Source #

This `ReifiedTraversal`

will ignore any duplicates in the supplied list
of indices.

`>>>`

[4,8,6,12,20,22]`toListOf (ordinals [1,3,2,5,9,10]) $ Vector.fromList [2,4..40]`