| 5 | |

| 6 | == The basic VECTORISE pragma for values == |

| 7 | |

| 8 | Given a function `f`, the vectoriser generates a vectorised version `f_v`, which comprises the original, scalar version of the function and a second version lifted into array space. The lifted version operates on arrays of inputs and produces arrays of results in one parallel computation. The original function name is, then, rebound to use the scalar version referred to by `f_v`. This differs from the original in that it uses vectorised versions for any embedded parallel array computations. |

| 9 | |

| 10 | However, if a function `f` is accompanied by a pragma of the form |

| 11 | {{{ |

| 12 | {-# VECTORISE f = e #-} |

| 13 | }}} |

| 14 | then the vectoriser defines `f_v = e` and refrains from rebinding `f`. This implies that for `f :: t`, `e`'s type is the `t` vectorised (in particular), `e`'s type uses the array closure type `(:->)` instead of the vanilla function space `(->)`. |