vec-optics-0.4: Vec: length-indexed (sized) list: optics support
Safe HaskellNone
LanguageHaskell2010

Data.Vec.Pull.Optics

Synopsis

Indexing

ix :: Fin n -> Lens' (Vec n a) a Source #

Index lens.

a ::: x ::: c ::: VNil >>> view (L._Pull % ix (FS FZ)) (a L.::: b L.::: c L.::: L.VNil) b

>>> set (L._Pull % ix (FS FZ)) 'x' ('a' L.::: 'b' L.::: 'c' L.::: L.VNil)
'a' ::: 'x' ::: 'c' ::: VNil

_Cons :: Iso (Vec ('S n) a) (Vec ('S n) b) (a, Vec n a) (b, Vec n b) Source #

Match on non-empty Vec.

Note: lens _Cons is a Prism. In fact, Vec n a cannot have an instance of Cons as types don't match.

_head :: Lens' (Vec ('S n) a) a Source #

Head lens. Note: lens _head is a Traversal'.

>>> view (L._Pull % _head) ('a' L.::: 'b' L.::: 'c' L.::: L.VNil)
'a'
>>> set (L._Pull % _head) 'x' ('a' L.::: 'b' L.::: 'c' L.::: L.VNil)
'x' ::: 'b' ::: 'c' ::: VNil

_tail :: Lens' (Vec ('S n) a) (Vec n a) Source #

Tail lens.

Conversions

_Vec :: SNatI n => Prism' [a] (Vec n a) Source #

Prism from list.