| Copyright | (c) 2006-2009 Don Stewart 2013-2016 Sean Leather | 
|---|---|
| License | See LICENSE file | 
| Maintainer | sean.leather@gmail.com | 
| Stability | stable | 
| Portability | portable | 
| Safe Haskell | Trustworthy | 
| Language | Haskell98 | 
Data.DList
Contents
Description
Difference lists: a data structure for O(1) append on lists.
Synopsis
- data DList a where
 - fromList :: [a] -> DList a
 - toList :: DList a -> [a]
 - apply :: DList a -> [a] -> [a]
 - empty :: DList a
 - singleton :: a -> DList a
 - cons :: a -> DList a -> DList a
 - snoc :: DList a -> a -> DList a
 - append :: DList a -> DList a -> DList a
 - concat :: [DList a] -> DList a
 - replicate :: Int -> a -> DList a
 - list :: b -> (a -> DList a -> b) -> DList a -> b
 - head :: DList a -> a
 - tail :: DList a -> DList a
 - unfoldr :: (b -> Maybe (a, b)) -> b -> DList a
 - foldr :: (a -> b -> b) -> b -> DList a -> b
 - map :: (a -> b) -> DList a -> DList b
 
Documentation
A difference list is a function that, given a list, returns the original contents of the difference list prepended to the given list.
This structure supports O(1) append and snoc operations on lists, making it
 very useful for append-heavy uses (esp. left-nested uses of ++), such
 as logging and pretty printing.
Here is an 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 yBundled Patterns
| pattern Nil :: DList a | A unidirectional pattern synonym using   | 
| pattern Cons :: a -> [a] -> DList a | A unidirectional pattern synonym using   | 
Instances
Construction
apply :: DList a -> [a] -> [a] Source #
Apply a dlist to a list to get the underlying list with an extension
apply (fromList xs) ys = xs ++ ys