diff --git a/Data/Array/Repa/Algorithms/Matrix.hs b/Data/Array/Repa/Algorithms/Matrix.hs
--- a/Data/Array/Repa/Algorithms/Matrix.hs
+++ b/Data/Array/Repa/Algorithms/Matrix.hs
@@ -2,10 +2,10 @@
 {-# LANGUAGE PackageImports #-}
 
 -- | Algorithms operating on matrices.
---
+-- 
 --   These functions should give performance comparable with nested loop C
---   implementations.
---
+--   implementations. 
+-- 
 --   If you care deeply about runtime performance then you
 --   may be better off using a binding to LAPACK, such as hvector.
 --
@@ -27,6 +27,7 @@
 import Data.Array.Repa                  as R
 import Data.Array.Repa.Eval             as R
 import Data.Array.Repa.Unsafe           as R
+import Control.Monad
 import Control.Monad.ST.Strict
 
 
@@ -46,18 +47,18 @@
 -- MMult ----------------------------------------------------------------------
 -- | Matrix matrix multiply, in parallel.
 mmultP  :: Monad m
-        => Array U DIM2 Double
-        -> Array U DIM2 Double
+        => Array U DIM2 Double 
+        -> Array U DIM2 Double 
         -> m (Array U DIM2 Double)
 
-mmultP arr brr
- = [arr, brr] `deepSeqArrays`
+mmultP arr brr 
+ = [arr, brr] `deepSeqArrays` 
    do   trr      <- transpose2P brr
         let (Z :. h1  :. _)  = extent arr
         let (Z :. _   :. w2) = extent brr
-        trr `deepSeqArray` computeP
+        trr `deepSeqArray` computeP 
          $ fromFunction (Z :. h1 :. w2)
-         $ \ix   -> R.sumAllS
+         $ \ix   -> R.sumAllS 
                   $ R.zipWith (*)
                         (unsafeSlice arr (Any :. (row ix) :. All))
                         (unsafeSlice trr (Any :. (col ix) :. All))
@@ -65,8 +66,8 @@
 
 
 -- | Matrix matrix multiply, sequentially.
-mmultS  :: Array U DIM2 Double
-        -> Array U DIM2 Double
+mmultS  :: Array U DIM2 Double 
+        -> Array U DIM2 Double 
         -> Array U DIM2 Double
 
 mmultS arr brr
@@ -74,9 +75,9 @@
    do   trr     <- R.now $ transpose2S brr
         let (Z :. h1  :. _)  = extent arr
         let (Z :. _   :. w2) = extent brr
-        return $ computeS
+        return $ computeS 
          $ fromFunction (Z :. h1 :. w2)
-         $ \ix   -> R.sumAllS
+         $ \ix   -> R.sumAllS 
                   $ R.zipWith (*)
                         (unsafeSlice arr (Any :. (row ix) :. All))
                         (unsafeSlice trr (Any :. (col ix) :. All)))
@@ -86,13 +87,13 @@
 -- Transpose ------------------------------------------------------------------
 -- | Transpose a 2D matrix, in parallel.
 transpose2P
-        :: Monad m
-        => Array U DIM2 Double
+        :: Monad m 
+        => Array U DIM2 Double 
         -> m (Array U DIM2 Double)
 
 transpose2P arr
  = arr `deepSeqArray`
-   do   computeUnboxedP
+   do   computeUnboxedP 
          $ unsafeBackpermute new_extent swap arr
  where  swap (Z :. i :. j)      = Z :. j :. i
         new_extent              = swap (extent arr)
@@ -101,7 +102,7 @@
 
 -- | Transpose a 2D matrix, sequentially.
 transpose2S
-        :: Array U DIM2 Double
+        :: Array U DIM2 Double 
         -> Array U DIM2 Double
 
 transpose2S arr
diff --git a/repa-algorithms.cabal b/repa-algorithms.cabal
--- a/repa-algorithms.cabal
+++ b/repa-algorithms.cabal
@@ -1,5 +1,5 @@
 Name:                repa-algorithms
-Version:             3.4.1.4
+Version:             3.4.1.5
 License:             BSD3
 License-file:        LICENSE
 Author:              The DPH Team
@@ -18,7 +18,7 @@
 
 Library
   Build-Depends:
-        base                 >= 4.8 && < 4.15
+        base                 >= 4.8 && < 5
       , vector               >= 0.11 && < 0.13
       , repa                 == 3.4.1.*
 
