# Par and seq

From HaskellWiki

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 ?