separated-0.0.2: A data type with elements separated by values

Safe HaskellNone

Data.Separated

Synopsis

Documentation

data Separated s a Source

Instances

Functor (Separated s)

Map across a Separated on the element values.

fmap id (x :: Separated Int String) == x
>>> fmap (+1) (single 1)
[2]
>>> fmap (+1) (set separatedTail [('a', 2), ('b', 3)] (single 1))
[2'a'3'b'4]
(Eq s, Eq a) => Eq (Separated s a) 
(Ord s, Ord a) => Ord (Separated s a) 
(Show s, Show a) => Show (Separated s a) 

(~>) :: (s, a) -> Separated s a -> Separated s aSource

Prepend a separator and element to the current tail.

>>> ('b', 9) ~> ('a', 8) ~> single 7
[7'b'9'a'8]

single :: a -> Separated s aSource

>>> single 4
[4]
single x ^. separatedTail == []

separatedValues1 :: Separated s a -> NonEmpty aSource

Return all element values.

>>> separatedValues1 (single 8)
8 :| []
>>> separatedValues1 (('a', 9) ~> single 8)
8 :| [9]
let h :| _ = separatedValues1 (single x) in h == (x :: Int)
let _ :| t = separatedValues1 (e ~> single x) in t == fmap fst [e]

separatedValues :: Separated s a -> [a]Source

Return all element values.

>>> separatedValues (single 8)
[8]
>>> separatedValues (('a', 9) ~> single 8)
[8,9]
let h : _ = separatedValues (single x) in h == (x :: Int)
let _ : t = separatedValues (e ~> single x) in t == fmap fst [e]

separatedHead :: Lens' (Separated s a) aSource

A lens on the first element value.

>>> single 7 ^. separatedHead
7
single x ^. separatedHead == (x :: Int)

separatedTail :: Lens' (Separated s a) [(s, a)]Source

A lens on the tail.

>>> single 7 ^. separatedHead
7
(e ~> single x) ^. separatedTail == [e]

separators :: Separated s a -> [s]Source

Return all separator values.

>>> separators (('a', 8) ~> single 7)
"a"
>>> separators (('b', 9) ~> ('a', 8) ~> single 7)
"ba"
separators (single x) == []