blob: 12d3a53041e4cf0b91d7c8c7b7c39191080b4848 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
module Data.DList
( DList(..)
, empty
, singleton
, toList
, cons
, snoc
, append
) where
newtype DList a = DL { unDL :: [a] -> [a] }
empty :: DList a
empty = DL ([] ++)
{-# INLINE empty #-}
singleton :: a -> DList a
singleton x = DL ([x] ++)
{-# INLINE singleton #-}
toList :: DList a -> [a]
toList xsf = unDL xsf []
{-# INLINE toList #-}
-- Prepend a single element to a dlist.
infixr `cons`
cons :: a -> DList a -> DList a
cons x xs = DL ((x:) . unDL xs)
{-# INLINE cons #-}
-- Append a single element to a dlist.
infixl `snoc`
snoc :: DList a -> a -> DList a
snoc xs x = append xs $ singleton x
{-# INLINE snoc #-}
-- Append dlists.
append :: DList a -> DList a -> DList a
append xsf ysf = DL $ (unDL xsf) . (unDL ysf)
{-# INLINE append #-}
|