Par and seq
The functions par
and seq
have much in common.
They have the same signature and thus the same use patterns.
The function par
let you start a computation in parallel
and seq
forces a computation to actually take place (avoiding lazy evaluation).
par :: a -> b -> b
seq :: a -> b -> b
You could also define a function par2
which computes the arguments of a two-argument function f
in parallel before feeding them to f
.
par2 :: (a -> b -> c) -> (a -> b -> c)
par2 f x y = x `par` y `par` f x y
The function par2
is also universal, because you can define par
in terms of par2
.
par = par2 (\ _x y -> y)
You can see, that par
is the more basic combinator, because it scales to any number of arguments.
See also
- Haskell-Cafe: 'par' - why has it the type a -> b -> b ?