- The
`AList`

type and operations - Operations to build
`AList`

s in the`Par`

monad

This module defines the `AList`

type, a list that supports
constant-time append, and is therefore ideal for building the
result of tree-shaped parallel computations.

- data AList a
- empty :: AList a
- singleton :: a -> AList a
- cons :: a -> AList a -> AList a
- head :: AList a -> a
- tail :: AList a -> AList a
- length :: AList a -> Int
- null :: AList a -> Bool
- append :: AList a -> AList a -> AList a
- toList :: AList a -> [a]
- fromList :: [a] -> AList a
- parBuildThresh :: NFData a => Int -> InclusiveRange -> (Int -> a) -> Par (AList a)
- parBuildThreshM :: NFData a => Int -> InclusiveRange -> (Int -> Par a) -> Par (AList a)
- parBuild :: NFData a => InclusiveRange -> (Int -> a) -> Par (AList a)
- parBuildM :: NFData a => InclusiveRange -> (Int -> Par a) -> Par (AList a)

# The `AList`

type and operations

List that support constant-time append (sometimes called join-lists).

*O(n)* take the head element of an `AList`

NB. linear-time, because the list might look like this:

(((... `append` a) `append` b) `append` c)

# Operations to build `AList`

s in the `Par`

monad

parBuildThresh :: NFData a => Int -> InclusiveRange -> (Int -> a) -> Par (AList a)Source

Build a balanced `AList`

in parallel, constructing each element as a
function of its index. The threshold argument provides control
over the degree of parallelism. It indicates under what number
of elements the build process should switch from parallel to
serial.

parBuildThreshM :: NFData a => Int -> InclusiveRange -> (Int -> Par a) -> Par (AList a)Source

Variant of `parBuildThresh`

in which the element-construction function is itself a `Par`

computation.

parBuild :: NFData a => InclusiveRange -> (Int -> a) -> Par (AList a)Source

"Auto-partitioning" version of `parBuildThresh`

that chooses the threshold based on
the size of the range and the number of processors..