Par and seq

From HaskellWiki
Jump to: navigation, search

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