|
Data.DList | Portability | portable (Haskell 98) | Stability | experimental | Maintainer | dons@cse.unsw.edu.au |
|
|
|
|
|
Description |
Difference lists: a data structure for O(1) append on lists.
|
|
Synopsis |
|
|
|
Documentation |
|
newtype DList a |
A difference list is a function that given a list, returns the
original contents of the difference list prepended at the given list
This structure supports O(1) append and snoc operations on lists,
making it very useful for append-heavy uses, such as logging and
pretty printing.
For example, using DList as the state type when printing a tree with
the Writer monad
import Control.Monad.Writer
import Data.DList
data Tree a = Leaf a | Branch (Tree a) (Tree a)
flatten_writer :: Tree x -> DList x
flatten_writer = snd . runWriter . flatten
where
flatten (Leaf x) = tell (singleton x)
flatten (Branch x y) = flatten x >> flatten y
| Constructors | | Instances | |
|
|
Construction
|
|
fromList :: [a] -> DList a |
Converting a normal list to a dlist
|
|
toList :: DList a -> [a] |
Converting a dlist back to a normal list
|
|
Basic functions
|
|
empty :: DList a |
Create a difference list containing no elements
|
|
singleton :: a -> DList a |
Create difference list with given single element
|
|
cons :: a -> DList a -> DList a |
O(1), Prepend a single element to a difference list
|
|
snoc :: DList a -> a -> DList a |
O(1), Append a single element at a difference list
|
|
append :: DList a -> DList a -> DList a |
O(1), Appending difference lists
|
|
concat :: [DList a] -> DList a |
O(spine), Concatenate difference lists
|
|
replicate :: Int -> a -> DList a |
O(n), Create a difference list of the given number of elements
|
|
list :: b -> (a -> DList a -> b) -> DList a -> b |
O(length dl), List elimination, head, tail.
|
|
head :: DList a -> a |
Return the head of the list
|
|
tail :: DList a -> DList a |
Return the tail of the list
|
|
unfoldr :: (b -> Maybe (a, b)) -> b -> DList a |
Unfoldr for difference lists
|
|
foldr :: (a -> b -> b) -> b -> DList a -> b |
Foldr over difference lists
|
|
map :: (a -> b) -> DList a -> DList b |
Map over difference lists.
|
|
MonadPlus
|
|
maybeReturn :: MonadPlus m => Maybe a -> m a |
|
Produced by Haddock version 2.7.2 |