Haskell has good support for parallel and multicore programming.

We can write a parallel program by adding `par` to expressions, like so:

import Control.Parallel

main = a `par` b `par` c `pseq` print (a + b + c)

where

a = ack 3 10

b = fac 42

c = fib 34

fac 0 = 1

fac n = n * fac (n-1)

ack 0 n = n+1

ack m 0 = ack (m-1) 1

ack m n = ack (m-1) (ack m (n-1))

fib 0 = 0

fib 1 = 1

fib n = fib (n-1) + fib (n-2)