sequence-0.9.8: A type class for sequences and various sequence data structures.

Copyright(c) Atze van der Ploeg 2014
LicenseBSD-style
Maintaineratzeus@gmail.org
Stabilityprovisional
Portabilityportable
Safe HaskellSafe
LanguageHaskell98

Data.SequenceClass

Description

A type class for sequences.

See the package type-aligned for a generalization of this type class sequences.

Synopsis

Documentation

class (Functor s, Foldable s) => Sequence s where #

A type class for (finite) sequences

Minimal complete defention: empty and singleton and (viewl or viewr) and (>< or |> or <|)

Instances should satisfy the following laws:

Monoid laws:

empty >< x == x
x >< empty == x
(x >< y) >< z = x >< (y >< z)

Observation laws:

viewl (singleton e >< s) == e :< s
viewl empty == EmptyL

The behaviour of <|,|>, and viewr is implied by the above laws and their default definitions.

Minimal complete definition

empty, singleton

Methods

empty :: s c #

singleton :: c -> s c #

(><) :: s c -> s c -> s c infix 5 #

Append two sequences

viewl :: s c -> ViewL s c #

View a sequence from the left

viewr :: s c -> ViewR s c #

View a sequence from the right

Default definition:

viewr q = case viewl q of 
   EmptyL -> EmptyR
   h :< t -> case viewr t of
       EmptyR -> empty   :> h
       p :> l   -> (h <| p) :> l

(|>) :: s c -> c -> s c infixl 5 #

Append a single element to the right

Default definition:

l |> r = l >< singleton r

(<|) :: c -> s c -> s c infixr 5 #

Append a single element to the left

Default definition:

l <| r = singleton l >< r

Instances

Sequence [] # 

Methods

empty :: [c] #

singleton :: c -> [c] #

(><) :: [c] -> [c] -> [c] #

viewl :: [c] -> ViewL [] c #

viewr :: [c] -> ViewR [] c #

(|>) :: [c] -> c -> [c] #

(<|) :: c -> [c] -> [c] #

Sequence Seq # 

Methods

empty :: Seq c #

singleton :: c -> Seq c #

(><) :: Seq c -> Seq c -> Seq c #

viewl :: Seq c -> ViewL Seq c #

viewr :: Seq c -> ViewR Seq c #

(|>) :: Seq c -> c -> Seq c #

(<|) :: c -> Seq c -> Seq c #

Sequence Queue # 

Methods

empty :: Queue c #

singleton :: c -> Queue c #

(><) :: Queue c -> Queue c -> Queue c #

viewl :: Queue c -> ViewL Queue c #

viewr :: Queue c -> ViewR Queue c #

(|>) :: Queue c -> c -> Queue c #

(<|) :: c -> Queue c -> Queue c #

Sequence FastQueue # 
Sequence BSeq # 

Methods

empty :: BSeq c #

singleton :: c -> BSeq c #

(><) :: BSeq c -> BSeq c -> BSeq c #

viewl :: BSeq c -> ViewL BSeq c #

viewr :: BSeq c -> ViewR BSeq c #

(|>) :: BSeq c -> c -> BSeq c #

(<|) :: c -> BSeq c -> BSeq c #

Sequence q => Sequence (ToCatQueue q) # 

Methods

empty :: ToCatQueue q c #

singleton :: c -> ToCatQueue q c #

(><) :: ToCatQueue q c -> ToCatQueue q c -> ToCatQueue q c #

viewl :: ToCatQueue q c -> ViewL (ToCatQueue q) c #

viewr :: ToCatQueue q c -> ViewR (ToCatQueue q) c #

(|>) :: ToCatQueue q c -> c -> ToCatQueue q c #

(<|) :: c -> ToCatQueue q c -> ToCatQueue q c #

data ViewL s c where #

Constructors

EmptyL :: ViewL s c 
(:<) :: c -> s c -> ViewL s c 

data ViewR s c where #

Constructors

EmptyR :: ViewR s c 
(:>) :: s c -> c -> ViewR s c