Prev Up Next
Go backward to Strategies Controlling Evaluation Degree
Go up to Strategies Separate Algorithm from Dynamic Behaviour
Go forward to Data-oriented Parallelism

Combining Strategies

Because evaluation strategies are just normal higher-order functions, they can be combined using the full power of the language, e.g. passed as parameters or composed using the function composition operator. Elements of a strategy are combined by sequential or parallel composition (seq or par). Many useful strategies are higher-order, for example, seqList below is a strategy that sequentially applies a strategy to every element of a list. The strategy seqList r0 evaluates just the spine of a list, and seqList rwhnf evaluates every element of a list to WHNF. There are analogous functions for every datatype, indeed in later versions of Haskell (1.3 and later [Peterson et al., 1996]) constructor classes can be defined that work on arbitrary datatypes. The strategic examples in this paper are presented in Haskell 1.2 for pragmatic reasons: they are extracted from programs run on our efficient parallel implementation of Haskell 1.2 [Trinder et al., 1996].
seqList :: Strategy a -> Strategy [a]
seqList strat []     = ()
seqList strat (x:xs) = strat x `seq` (seqList strat xs)


Prev Up Next