*hmatrix* functions work on `F` arrays. Each function in _Numeric.LinearAlgebra.Repa_ is available in 5 variations. E.g. for **dot**:
-`dot` takes `F` arrays as input.
-`dotS` takes `D` arrays as input and computes them sequentially.
-`dotSIO` takes `D` arrays as input and computes them sequentially in the `IO` monad.
-`dotP` takes `D` arrays as input and computes them parallelly in an arbitrary monad (*remember*: parallel computations in *repa* always work in a monad).
-`dotPIO` takes `D` arrays as input and computes them parallelly in the `IO` monad.
The `IO` versions can be faster than the non-`IO` versions.
The `F` type constructor is defined in `Data.Array.Repa.Repr.ForeignPtr`
**Note: the `P` functions compute the *argument arrays* in parallel. The algorithms themselves are done by *hmatrix* and are always single-threaded!**
#### Conversion
-**`delay`** converts to `D` in O(1)
-**`computeS`**, **`computeP`** convert from `D` in O(n)