lens-3.7: Lenses, Folds and Traversals

Portability portable provisional Edward Kmett None

Data.List.Lens

Description

Traversals for manipulating parts of a list.

Synopsis

# Documentation

A `Traversal` reading and writing to the `head` of a non-empty list.

````>>> ````[a,b,c]^? _head
```Just a
```
````>>> ````[a,b,c] & _head .~ d
```[d,b,c]
```
````>>> ````[a,b,c] & _head %~ f
```[f a,b,c]
```
````>>> ````[] & _head %~ f
```[]
```
````>>> ````[1,2,3]^?!_head
```1
```
````>>> ````[]^?_head
```Nothing
```
````>>> ````[1,2]^?_head
```Just 1
```
````>>> ````[] & _head .~ 1
```[]
```
````>>> ````[0] & _head .~ 2
```[2]
```
````>>> ````[0,1] & _head .~ 2
```[2,1]
```

_tail :: Simple Traversal [a] [a]Source

A `Traversal` reading and writing to the `tail` of a non-empty list

````>>> ````[a,b] & _tail .~ [c,d,e]
```[a,c,d,e]
```
````>>> ````[] & _tail .~ [a,b]
```[]
```
````>>> ````[a,b,c,d,e] & _tail.traverse %~ f
```[a,f b,f c,f d,f e]
```
````>>> ````[1,2] & _tail .~ [3,4,5]
```[1,3,4,5]
```
````>>> ````[] & _tail .~ [1,2]
```[]
```
````>>> ````[a,b,c]^?_tail
```Just [b,c]
```
````>>> ````[1,2]^?!_tail
```[2]
```
````>>> ````"hello"^._tail
```"ello"
```
````>>> ````""^._tail
```""
```

A `Traversal` reading and writing to the last element of a non-empty list

````>>> ````[a,b,c]^?!_last
```c
```
````>>> ````[]^?_last
```Nothing
```
````>>> ````[a,b,c] & _last %~ f
```[a,b,f c]
```
````>>> ````[1,2]^?_last
```Just 2
```
````>>> ````[] & _last .~ 1
```[]
```
````>>> ````[0] & _last .~ 2
```[2]
```
````>>> ````[0,1] & _last .~ 2
```[0,2]
```

_init :: Simple Traversal [a] [a]Source

A `Traversal` reading and replacing all but the a last element of a non-empty list

````>>> ````[a,b,c,d]^?_init
```Just [a,b,c]
```
````>>> ````[]^?_init
```Nothing
```
````>>> ````[a,b] & _init .~ [c,d,e]
```[c,d,e,b]
```
````>>> ````[] & _init .~ [a,b]
```[]
```
````>>> ````[a,b,c,d] & _init.traverse %~ f
```[f a,f b,f c,d]
```
````>>> ````[1,2,3]^?_init
```Just [1,2]
```
````>>> ````[1,2,3,4]^?!_init
```[1,2,3]
```
````>>> ````"hello"^._init
```"hell"
```
````>>> ````""^._init
```""
```

strippingPrefix :: Eq a => [a] -> Simple Prism [a] [a]Source

A `Prism` stripping a prefix from a list when used as a `Traversal`, or prepending that prefix when run backwards:

````>>> ````"preview" ^? strippingPrefix "pre"
```Just "view"
```
````>>> ````"review" ^? strippingPrefix "pre"
```Nothing
```
````>>> ````"amble"^.remit (strippingPrefix "pre")
```"preamble"
```