diff --git a/comfort-array.cabal b/comfort-array.cabal
--- a/comfort-array.cabal
+++ b/comfort-array.cabal
@@ -1,5 +1,5 @@
 Name:             comfort-array
-Version:          0.5.2.3
+Version:          0.5.3
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -97,7 +97,7 @@
   test-module.list
 
 Source-Repository this
-  Tag:         0.5.2.3
+  Tag:         0.5.3
   Type:        darcs
   Location:    https://hub.darcs.net/thielema/comfort-array/
 
@@ -112,14 +112,15 @@
 Library
   Build-Depends:
     storablevector >=0.2 && <0.3,
-    primitive >=0.6.4 && <0.9,
+    -- 0.7.1 required for arrayFromList, arrayFromListN
+    primitive >=0.7.1 && <0.10,
     guarded-allocation >=0.0.1 && <0.1,
     storable-record >=0.0.1 && <0.1,
     tagged >=0.7 && <0.9,
-    deepseq >=1.3 && <1.5,
+    deepseq >=1.3 && <1.6,
     QuickCheck >=2 && <3,
     semigroups >=0.18.3 && <1.0,
-    containers >=0.4 && <0.7,
+    containers >=0.4 && <0.8,
     -- transformers-compat required for Functor.Classes in GHC-7.8.4
     transformers-compat >=0.7.2 && <0.8,
     transformers >=0.3 && <0.7,
diff --git a/src/Data/Array/Comfort/Boxed.hs b/src/Data/Array/Comfort/Boxed.hs
--- a/src/Data/Array/Comfort/Boxed.hs
+++ b/src/Data/Array/Comfort/Boxed.hs
@@ -54,7 +54,6 @@
 import Data.Traversable (Traversable, traverse)
 import Data.Foldable (forM_)
 import Data.Either.HT (maybeRight)
-import Data.Maybe (fromMaybe)
 
 import Prelude hiding (zipWith, replicate)
 
@@ -122,14 +121,16 @@
 infixl 9 !
 
 (!) :: (Shape.Indexed sh) => Array sh a -> Shape.Index sh -> a
-(!) arr ix =
-   fromMaybe (error "Array.Comfort.Boxed.!: index out of bounds") $
-   accessMaybe arr ix
+(!) arr =
+   either (error . ("Array.Comfort.Boxed.!: " ++)) id . accessEither arr
 
 accessMaybe :: (Shape.Indexed sh) => Array sh a -> Shape.Index sh -> Maybe a
-accessMaybe (Array sh arr) ix =
-   fmap (Prim.indexArray arr) $ maybeRight $
-   Shape.getChecked $ Shape.unifiedOffset sh ix
+accessMaybe arr = maybeRight . accessEither arr
+
+accessEither ::
+   (Shape.Indexed sh) => Array sh a -> Shape.Index sh -> Either String a
+accessEither (Array sh arr) ix =
+   fmap (Prim.indexArray arr) $ Shape.getChecked $ Shape.unifiedOffset sh ix
 
 
 zipWith ::
diff --git a/src/Data/Array/Comfort/Boxed/Unchecked.hs b/src/Data/Array/Comfort/Boxed/Unchecked.hs
--- a/src/Data/Array/Comfort/Boxed/Unchecked.hs
+++ b/src/Data/Array/Comfort/Boxed/Unchecked.hs
@@ -117,11 +117,11 @@
    List.map (Prim.indexArray arr) $ List.take (Shape.size sh) [0..]
 
 fromList :: (Shape.C sh) => sh -> [a] -> Array sh a
-fromList sh xs = Array sh $ Prim.fromListN (Shape.size sh) xs
+fromList sh xs = Array sh $ Prim.arrayFromListN (Shape.size sh) xs
 
 vectorFromList :: [a] -> Array (Shape.ZeroBased Int) a
 vectorFromList xs =
-   let arr = Prim.fromList xs
+   let arr = Prim.arrayFromList xs
    in Array (Shape.ZeroBased $ Prim.sizeofArray arr) arr
 
 replicate :: (Shape.C sh) => sh -> a -> Array sh a
@@ -132,13 +132,13 @@
 map :: (Shape.C sh) => (a -> b) -> Array sh a -> Array sh b
 map f (Array sh arr) = Array sh $
    let n = Shape.size sh
-   in Prim.fromListN n $ List.map (f . Prim.indexArray arr) $ List.take n [0..]
+   in Prim.arrayFromListN n $ List.map (f . Prim.indexArray arr) $ List.take n [0..]
 
 zipWith ::
    (Shape.C sh) => (a -> b -> c) -> Array sh a -> Array sh b -> Array sh c
 zipWith f (Array sha arra) (Array _shb arrb) = Array sha $
    let n = Shape.size sha
-   in Prim.fromListN n $
+   in Prim.arrayFromListN n $
       List.map (\k -> f (Prim.indexArray arra k) (Prim.indexArray arrb k)) $
       List.take n [0..]
 
diff --git a/src/Data/Array/Comfort/Shape.hs b/src/Data/Array/Comfort/Shape.hs
--- a/src/Data/Array/Comfort/Shape.hs
+++ b/src/Data/Array/Comfort/Shape.hs
@@ -9,6 +9,8 @@
    InvIndexed(..), messageIndexFromOffset, assertIndexFromOffset,
    Static(..),
    Pattern(..),
+   AppendSemigroup(..),
+   AppendMonoid(..),
 
    requireCheck,
    CheckSingleton(..),
@@ -286,6 +288,19 @@
    indexPattern :: (Index sh -> x) -> sh -> DataPattern sh x
 
 
+
+{- |
+We cannot use 'Semigroup'
+because 'Semigroup' instances for '()' and '(a,b)' are already defined in a way,
+that is incompatible for our needs.
+-}
+class (C sh) => AppendSemigroup sh where
+   append :: sh -> sh -> sh
+
+class (AppendSemigroup sh) => AppendMonoid sh where
+   empty :: sh
+
+
 data Zero = Zero
    deriving (Eq, Ord, Show)
 
@@ -303,7 +318,13 @@
    indexPattern _ Zero = ()
 -}
 
+instance AppendSemigroup Zero where
+   append Zero Zero = Zero
 
+instance AppendMonoid Zero where
+   empty = Zero
+
+
 instance C () where
    size () = 1
 
@@ -374,7 +395,13 @@
       then error "Shape.zeroBasedSplit: negative number of elements"
       else let k = min n m in ZeroBased k ::+ ZeroBased (m-k)
 
+instance (Integral n) => AppendSemigroup (ZeroBased n) where
+   append (ZeroBased n) (ZeroBased m) = ZeroBased (n+m)
 
+instance (Integral n) => AppendMonoid (ZeroBased n) where
+   empty = ZeroBased 0
+
+
 instance (Integral n) => Pattern (ZeroBased n) where
    type DataPattern (ZeroBased n) x = n -> x
    indexPattern extend (ZeroBased _n) = extend
@@ -420,7 +447,13 @@
       assertIndexFromOffset "OneBased" k0 $ 0<=k && k<len
       pure $ 1+k
 
+instance (Integral n) => AppendSemigroup (OneBased n) where
+   append (OneBased n) (OneBased m) = OneBased (n+m)
 
+instance (Integral n) => AppendMonoid (OneBased n) where
+   empty = OneBased 0
+
+
 {- |
 'Range' denotes an inclusive range like
 those of the Haskell 98 standard @Array@ type from the @array@ package.
@@ -839,6 +872,14 @@
 instance (Static sh0, Static sh1) => Static (sh0,sh1) where
    static = (static, static)
 
+instance
+   (AppendSemigroup sh0, C sh1, Eq sh1) =>
+      AppendSemigroup (sh0,sh1) where
+   append (sh0a,sh1a) (sh0b,sh1b) =
+      if sh1a == sh1b
+         then (append sh0a sh0b, sh1a)
+         else error $ "Shape.append: column shapes mismatch"
+
 instance (Pattern sh0, Pattern sh1) => Pattern (sh0,sh1) where
    type DataPattern (sh0,sh1) x = PatternRecord sh0 (DataPattern sh1 x)
    indexPattern extend (sh0,sh1) =
@@ -880,6 +921,14 @@
 
 instance (Static sh0, Static sh1, Static sh2) => Static (sh0,sh1,sh2) where
    static = (static, static, static)
+
+instance
+   (AppendSemigroup sh0, C sh1, Eq sh1, C sh2, Eq sh2) =>
+      AppendSemigroup (sh0,sh1,sh2) where
+   append (sh0a,sh1a,sh2a) (sh0b,sh1b,sh2b) =
+      if sh1a == sh1b &&  sh2a == sh2b
+         then (append sh0a sh0b, sh1a, sh2a)
+         else error $ "Shape.append: column shapes mismatch"
 
 runInvIndex :: s -> Back.Backwards (MS.State s) a -> a
 runInvIndex k = flip MS.evalState k . Back.forwards
diff --git a/src/Data/Array/Comfort/Storable.hs b/src/Data/Array/Comfort/Storable.hs
--- a/src/Data/Array/Comfort/Storable.hs
+++ b/src/Data/Array/Comfort/Storable.hs
@@ -46,6 +46,7 @@
    ) where
 
 import qualified Data.Array.Comfort.Storable.Mutable.Unchecked as MutArrayNC
+import qualified Data.Array.Comfort.Storable.Mutable.Private as MutArrayPriv
 import qualified Data.Array.Comfort.Storable.Mutable as MutArray
 import qualified Data.Array.Comfort.Storable.Unchecked as Array
 import qualified Data.Array.Comfort.Storable.Memory as Memory
@@ -75,7 +76,7 @@
 import Data.Map (Map)
 import Data.Set (Set)
 import Data.Foldable (forM_)
-import Data.Maybe (fromMaybe)
+import Data.Either.HT (maybeRight)
 import Data.Semigroup
          (Semigroup, (<>), Min(Min,getMin), Max(Max,getMax), Arg(Arg))
 
@@ -255,15 +256,21 @@
 infixl 9 !
 
 (!) :: (Shape.Indexed sh, Storable a) => Array sh a -> Shape.Index sh -> a
-(!) arr ix =
-   fromMaybe (errorArray "!" "index out of bounds") $
-   accessMaybe arr ix
+(!) arr = either (errorArray "!") id . accessEither arr
 
 accessMaybe ::
    (Shape.Indexed sh, Storable a) => Array sh a -> Shape.Index sh -> Maybe a
-accessMaybe arr ix = runST (do
+accessMaybe arr = maybeRight . accessEither arr
+
+accessEither ::
+   (Shape.Indexed sh, Storable a) =>
+   Array sh a -> Shape.Index sh -> Either String a
+accessEither arr ix = runST (do
    marr <- MutArrayNC.unsafeThaw arr
-   Trav.sequenceA $ MutArray.readMaybe marr ix)
+   case MutArrayPriv.readEither marr ix of
+      Right access -> fmap Right access
+      Left msg -> return $ Left msg)
+--   for GHC>=7.8: Trav.sequenceA $ MutArrayPriv.readEither marr ix)
 
 
 zipWith ::
diff --git a/src/Data/Array/Comfort/Storable/Mutable/Private.hs b/src/Data/Array/Comfort/Storable/Mutable/Private.hs
--- a/src/Data/Array/Comfort/Storable/Mutable/Private.hs
+++ b/src/Data/Array/Comfort/Storable/Mutable/Private.hs
@@ -105,8 +105,13 @@
 readMaybe ::
    (PrimMonad m, Shape.Indexed sh, Storable a) =>
    Array m sh a -> Shape.Index sh -> Maybe (m a)
-readMaybe (Array sh fptr) ix =
-   fmap (withArrayPtr fptr . flip peekElemOff) $ maybeRight $
+readMaybe arr = maybeRight . readEither arr
+
+readEither ::
+   (PrimMonad m, Shape.Indexed sh, Storable a) =>
+   Array m sh a -> Shape.Index sh -> Either String (m a)
+readEither (Array sh fptr) ix =
+   fmap (withArrayPtr fptr . flip peekElemOff) $
    Shape.getChecked $ Shape.unifiedOffset sh ix
 
 write ::
diff --git a/src/Data/Array/Comfort/Storable/Private.hs b/src/Data/Array/Comfort/Storable/Private.hs
--- a/src/Data/Array/Comfort/Storable/Private.hs
+++ b/src/Data/Array/Comfort/Storable/Private.hs
@@ -3,11 +3,16 @@
 
 import qualified Data.Array.Comfort.Storable.Mutable.Private as MutArray
 import qualified Data.Array.Comfort.Shape as Shape
+import Data.Semigroup (Semigroup((<>)))
+import Data.Monoid (Monoid(mempty, mappend))
 
 import qualified Foreign.Marshal.Array.Guarded as Alloc
-import Foreign.Storable (Storable, )
-import Foreign.ForeignPtr (ForeignPtr, )
+import Foreign.Marshal.Array (copyArray, advancePtr)
+import Foreign.ForeignPtr (ForeignPtr, withForeignPtr)
+import Foreign.Storable (Storable)
 
+import System.IO.Unsafe (unsafePerformIO)
+
 import Control.DeepSeq (NFData, rnf)
 import Control.Monad.Primitive (PrimMonad, unsafeIOToPrim)
 import Control.Monad.ST (runST)
@@ -106,3 +111,26 @@
 unsafeThaw (Array sh fptr) =
    unsafeIOToPrim $
    liftM (MutArray.Array sh) $ Alloc.thawInplace (Shape.size sh) fptr
+
+
+instance (Shape.AppendSemigroup sh, Storable a) => Semigroup (Array sh a) where
+   (<>) = append Shape.append
+
+instance (Shape.AppendMonoid sh, Storable a) => Monoid (Array sh a) where
+   mappend = (<>)
+   mempty = fromList Shape.empty []
+
+append ::
+   (Shape.C shx, Shape.C shy, Storable a) =>
+   (shx -> shy -> shz) ->
+   Array shx a -> Array shy a -> Array shz a
+append appendShape (Array shX x) (Array shY y) =
+   unsafePerformIO $
+   let sizeX = Shape.size shX in
+   let sizeY = Shape.size shY in
+   fmap (Array (appendShape shX shY) . fst) $
+      Alloc.create (sizeX+sizeY) $ \zPtr ->
+      withForeignPtr x $ \xPtr ->
+      withForeignPtr y $ \yPtr -> do
+         copyArray zPtr xPtr sizeX
+         copyArray (advancePtr zPtr sizeX) yPtr sizeY
diff --git a/src/Data/Array/Comfort/Storable/Unchecked.hs b/src/Data/Array/Comfort/Storable/Unchecked.hs
--- a/src/Data/Array/Comfort/Storable/Unchecked.hs
+++ b/src/Data/Array/Comfort/Storable/Unchecked.hs
@@ -142,14 +142,7 @@
 append ::
    (Shape.C shx, Shape.C shy, Storable a) =>
    Array shx a -> Array shy a -> Array (shx::+shy) a
-append (Array shX x) (Array shY y) =
-   unsafeCreate (shX::+shY) $ \zPtr ->
-   withForeignPtr x $ \xPtr ->
-   withForeignPtr y $ \yPtr -> do
-      let sizeX = Shape.size shX
-      let sizeY = Shape.size shY
-      copyArray zPtr xPtr sizeX
-      copyArray (advancePtr zPtr sizeX) yPtr sizeY
+append = Priv.append (::+)
 
 {- |
 prop> \(QC.NonNegative n) (Array16 x)  ->  x == Array.mapShape (Shape.ZeroBased . Shape.size) (Array.append (Array.take n x) (Array.drop n x))
diff --git a/test/DocTest/Data/Array/Comfort/Shape.hs b/test/DocTest/Data/Array/Comfort/Shape.hs
--- a/test/DocTest/Data/Array/Comfort/Shape.hs
+++ b/test/DocTest/Data/Array/Comfort/Shape.hs
@@ -1,12 +1,12 @@
 -- Do not edit! Automatically created with doctest-extract from src/Data/Array/Comfort/Shape.hs
-{-# LINE 123 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 125 "src/Data/Array/Comfort/Shape.hs" #-}
 
 module DocTest.Data.Array.Comfort.Shape where
 
 import Test.DocTest.Base
 import qualified Test.DocTest.Driver as DocTest
 
-{-# LINE 124 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 126 "src/Data/Array/Comfort/Shape.hs" #-}
 import     qualified Data.Array.Comfort.Shape as Shape
 import     qualified Data.Map as Map
 import     qualified Data.Set as Set
@@ -17,64 +17,64 @@
 
 test :: DocTest.T ()
 test = do
- DocTest.printPrefix "Data.Array.Comfort.Shape:311: "
-{-# LINE 311 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:332: "
+{-# LINE 332 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 311 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 332 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices ())
   [ExpectedLine [LineChunk "[()]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:334: "
-{-# LINE 334 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:355: "
+{-# LINE 355 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 334 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 355 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Shape.ZeroBased (7::Int)))
   [ExpectedLine [LineChunk "[0,1,2,3,4,5,6]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:386: "
-{-# LINE 386 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:413: "
+{-# LINE 413 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 386 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 413 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Shape.OneBased (7::Int)))
   [ExpectedLine [LineChunk "[1,2,3,4,5,6,7]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:430: "
-{-# LINE 430 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:463: "
+{-# LINE 463 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 430 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 463 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Shape.Range (-5) (5::Int)))
   [ExpectedLine [LineChunk "[-5,-4,-3,-2,-1,0,1,2,3,4,5]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:432: "
-{-# LINE 432 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:465: "
+{-# LINE 465 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 432 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 465 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Shape.Range (-1,-1) (1::Int,1::Int)))
   [ExpectedLine [LineChunk "[(-1,-1),(-1,0),(-1,1),(0,-1),(0,0),(0,1),(1,-1),(1,0),(1,1)]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:482: "
-{-# LINE 482 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:515: "
+{-# LINE 515 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 482 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 515 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Shape.Shifted (-4) (8::Int)))
   [ExpectedLine [LineChunk "[-4,-3,-2,-1,0,1,2,3]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:547: "
-{-# LINE 547 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:580: "
+{-# LINE 580 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 547 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 580 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Shape.Enumeration :: Shape.Enumeration Ordering))
   [ExpectedLine [LineChunk "[LT,EQ,GT]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:611: "
-{-# LINE 611 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:644: "
+{-# LINE 644 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 611 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 644 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Set.fromList "comfort"))
   [ExpectedLine [LineChunk "\"cfmort\""]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:647: "
-{-# LINE 647 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:680: "
+{-# LINE 680 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 647 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 680 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ fmap Shape.ZeroBased $ Map.fromList [('b', (0::Int)), ('a', 5), ('c', 2)])
   [ExpectedLine [LineChunk "[('a',0),('a',1),('a',2),('a',3),('a',4),('c',0),('c',1)]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:712: "
-{-# LINE 712 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:745: "
+{-# LINE 745 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 712 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 745 "src/Data/Array/Comfort/Shape.hs" #-}
    (
   let sh2 = (Shape.ZeroBased (2::Int), Shape.ZeroBased (2::Int)) in
   let sh3 = (Shape.ZeroBased (3::Int), Shape.ZeroBased (3::Int)) in
@@ -83,134 +83,134 @@
   Shape.indexFromOffset (Shape.Deferred sh2) 3)
   )
   [ExpectedLine [LineChunk "(4,3)"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:816: "
-{-# LINE 816 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:849: "
+{-# LINE 849 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 816 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 849 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Shape.ZeroBased (3::Int), Shape.ZeroBased (3::Int)))
   [ExpectedLine [LineChunk "[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:922: "
-{-# LINE 922 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:971: "
+{-# LINE 971 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 922 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 971 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.Square $ Shape.ZeroBased (3::Int))
   [ExpectedLine [LineChunk "[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:976: "
-{-# LINE 976 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1025: "
+{-# LINE 1025 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 976 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1025 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.Cube $ Shape.ZeroBased (2::Int))
   [ExpectedLine [LineChunk "[(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1035: "
-{-# LINE 1035 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1084: "
+{-# LINE 1084 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1035 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1084 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.Triangular Shape.Upper $ Shape.ZeroBased (3::Int))
   [ExpectedLine [LineChunk "[(0,0),(0,1),(0,2),(1,1),(1,2),(2,2)]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1037: "
-{-# LINE 1037 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1086: "
+{-# LINE 1086 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1037 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1086 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.Triangular Shape.Lower $ Shape.ZeroBased (3::Int))
   [ExpectedLine [LineChunk "[(0,0),(1,0),(1,1),(2,0),(2,1),(2,2)]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1169: "
-{-# LINE 1169 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1218: "
+{-# LINE 1218 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1169 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1218 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.simplexAscending (replicate 3 Shape.AllDistinct) $ Shape.ZeroBased (4::Int))
   [ExpectedLine [LineChunk "[[0,1,2],[0,1,3],[0,2,3],[1,2,3]]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1171: "
-{-# LINE 1171 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1220: "
+{-# LINE 1220 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1171 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1220 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.simplexAscending (replicate 3 Shape.SomeRepetitive) $ Shape.ZeroBased (3::Int))
   [ExpectedLine [LineChunk "[[0,0,0],[0,0,1],[0,0,2],[0,1,1],[0,1,2],[0,2,2],[1,1,1],[1,1,2],[1,2,2],[2,2,2]]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1173: "
-{-# LINE 1173 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1222: "
+{-# LINE 1222 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1173 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1222 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.simplexAscending [Shape.Repetitive,Shape.Distinct,Shape.Repetitive] $ Shape.ZeroBased (4::Int))
   [ExpectedLine [LineChunk "[[0,0,1],[0,0,2],[0,0,3],[0,1,2],[0,1,3],[0,2,3],[1,1,2],[1,1,3],[1,2,3],[2,2,3]]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1175: "
-{-# LINE 1175 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1224: "
+{-# LINE 1224 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1175 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1224 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.simplexAscending [Shape.Repetitive,Shape.Distinct,Shape.Distinct] $ Shape.ZeroBased (4::Int))
   [ExpectedLine [LineChunk "[[0,0,1],[0,0,2],[0,0,3],[0,1,2],[0,1,3],[0,2,3],[1,1,2],[1,1,3],[1,2,3],[2,2,3]]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1178: "
-{-# LINE 1178 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1227: "
+{-# LINE 1227 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1178 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1227 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.simplexDescending (replicate 3 Shape.AllDistinct) $ Shape.ZeroBased (4::Int))
   [ExpectedLine [LineChunk "[[2,1,0],[3,1,0],[3,2,0],[3,2,1]]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1180: "
-{-# LINE 1180 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1229: "
+{-# LINE 1229 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1180 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1229 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.simplexDescending (replicate 3 Shape.SomeRepetitive) $ Shape.ZeroBased (3::Int))
   [ExpectedLine [LineChunk "[[0,0,0],[1,0,0],[1,1,0],[1,1,1],[2,0,0],[2,1,0],[2,1,1],[2,2,0],[2,2,1],[2,2,2]]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1182: "
-{-# LINE 1182 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1231: "
+{-# LINE 1231 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1182 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1231 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.simplexDescending [Shape.Repetitive,Shape.Distinct,Shape.Repetitive] $ Shape.ZeroBased (4::Int))
   [ExpectedLine [LineChunk "[[1,1,0],[2,1,0],[2,2,0],[2,2,1],[3,1,0],[3,2,0],[3,2,1],[3,3,0],[3,3,1],[3,3,2]]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1184: "
-{-# LINE 1184 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1233: "
+{-# LINE 1233 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1184 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1233 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices $ Shape.simplexDescending [Shape.Repetitive,Shape.Distinct,Shape.Distinct] $ Shape.ZeroBased (4::Int))
   [ExpectedLine [LineChunk "[[1,1,0],[2,1,0],[2,2,0],[2,2,1],[3,1,0],[3,2,0],[3,2,1],[3,3,0],[3,3,1],[3,3,2]]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1418: "
-{-# LINE 1418 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1467: "
+{-# LINE 1467 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.property
-{-# LINE 1418 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1467 "src/Data/Array/Comfort/Shape.hs" #-}
      (let shape = Shape.Cyclic (10::Int) in Shape.offset shape (-1) == Shape.offset shape 9)
- DocTest.printPrefix "Data.Array.Comfort.Shape:1423: "
-{-# LINE 1423 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1472: "
+{-# LINE 1472 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1423 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1472 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Shape.Cyclic (7::Int)))
   [ExpectedLine [LineChunk "[0,1,2,3,4,5,6]"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1467: "
-{-# LINE 1467 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1516: "
+{-# LINE 1516 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1467 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1516 "src/Data/Array/Comfort/Shape.hs" #-}
    (Shape.indices (Shape.ZeroBased (3::Int) ::+ Shape.Range 'a' 'c'))
   [ExpectedLine [LineChunk "[Left 0,Left 1,Left 2,Right 'a',Right 'b',Right 'c']"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1554: "
-{-# LINE 1554 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1603: "
+{-# LINE 1603 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1554 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1603 "src/Data/Array/Comfort/Shape.hs" #-}
    (rnf (Shape.NestedTuple (Shape.Element 1, Shape.Element 2)))
   [ExpectedLine [LineChunk "()"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1556: "
-{-# LINE 1556 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1605: "
+{-# LINE 1605 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1556 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1605 "src/Data/Array/Comfort/Shape.hs" #-}
    (rnf (Shape.NestedTuple (Shape.Element 1, (Shape.Element 2, Shape.Element 3))))
   [ExpectedLine [LineChunk "()"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1558: "
-{-# LINE 1558 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1607: "
+{-# LINE 1607 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1558 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1607 "src/Data/Array/Comfort/Shape.hs" #-}
    (isBottom $ rnf (Shape.NestedTuple (Shape.Element undefined, Shape.Element 2)))
   [ExpectedLine [LineChunk "True"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1560: "
-{-# LINE 1560 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1609: "
+{-# LINE 1609 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1560 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1609 "src/Data/Array/Comfort/Shape.hs" #-}
    (isBottom $ rnf (Shape.NestedTuple (Shape.Element undefined, (Shape.Element 2, Shape.Element 3))))
   [ExpectedLine [LineChunk "True"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1562: "
-{-# LINE 1562 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1611: "
+{-# LINE 1611 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1562 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1611 "src/Data/Array/Comfort/Shape.hs" #-}
    (isBottom $ rnf (Shape.NestedTuple (Shape.Element 1, (Shape.Element undefined, Shape.Element 3))))
   [ExpectedLine [LineChunk "True"]]
- DocTest.printPrefix "Data.Array.Comfort.Shape:1564: "
-{-# LINE 1564 "src/Data/Array/Comfort/Shape.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Shape:1613: "
+{-# LINE 1613 "src/Data/Array/Comfort/Shape.hs" #-}
  DocTest.example
-{-# LINE 1564 "src/Data/Array/Comfort/Shape.hs" #-}
+{-# LINE 1613 "src/Data/Array/Comfort/Shape.hs" #-}
    (isBottom $ rnf (Shape.NestedTuple (Shape.Element 1, (Shape.Element 2, Shape.Element undefined))))
   [ExpectedLine [LineChunk "True"]]
diff --git a/test/DocTest/Data/Array/Comfort/Storable.hs b/test/DocTest/Data/Array/Comfort/Storable.hs
--- a/test/DocTest/Data/Array/Comfort/Storable.hs
+++ b/test/DocTest/Data/Array/Comfort/Storable.hs
@@ -1,12 +1,12 @@
 -- Do not edit! Automatically created with doctest-extract from src/Data/Array/Comfort/Storable.hs
-{-# LINE 86 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 87 "src/Data/Array/Comfort/Storable.hs" #-}
 
 module DocTest.Data.Array.Comfort.Storable where
 
 import Test.DocTest.Base
 import qualified Test.DocTest.Driver as DocTest
 
-{-# LINE 87 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 88 "src/Data/Array/Comfort/Storable.hs" #-}
 import     qualified Data.Array.Comfort.Storable as Array
 import     qualified Data.Array.Comfort.Shape as Shape
 import     Data.Array.Comfort.Storable (Array, (!))
@@ -59,57 +59,57 @@
 
 test :: DocTest.T ()
 test = do
- DocTest.printPrefix "Data.Array.Comfort.Storable:151: "
-{-# LINE 151 "src/Data/Array/Comfort/Storable.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable:152: "
+{-# LINE 152 "src/Data/Array/Comfort/Storable.hs" #-}
  DocTest.example
-{-# LINE 151 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 152 "src/Data/Array/Comfort/Storable.hs" #-}
    (Array.fromList (Shape.ZeroBased (5::Int)) ['a'..])
   [ExpectedLine [LineChunk "StorableArray.fromList (ZeroBased {zeroBasedSize = 5}) \"abcde\""]]
- DocTest.printPrefix "Data.Array.Comfort.Storable:164: "
-{-# LINE 164 "src/Data/Array/Comfort/Storable.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable:165: "
+{-# LINE 165 "src/Data/Array/Comfort/Storable.hs" #-}
  DocTest.example
-{-# LINE 164 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 165 "src/Data/Array/Comfort/Storable.hs" #-}
    (Array.fromTuple ('a',('b','c')) :: Array.Array (Shape.NestedTuple Shape.TupleIndex (X,(X,X))) Char)
   [ExpectedLine [LineChunk "StorableArray.fromList (NestedTuple {getNestedTuple = (Element 0,(Element 1,Element 2))}) \"abc\""]]
- DocTest.printPrefix "Data.Array.Comfort.Storable:167: "
-{-# LINE 167 "src/Data/Array/Comfort/Storable.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable:168: "
+{-# LINE 168 "src/Data/Array/Comfort/Storable.hs" #-}
  DocTest.example
-{-# LINE 167 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 168 "src/Data/Array/Comfort/Storable.hs" #-}
    ( let arr = Array.fromTuple ('a',('b','c')) :: Array.Array (Shape.NestedTuple Shape.TupleAccessor (X,(X,X))) Char
   in (arr ! fst, arr ! (fst.snd))
   )
   [ExpectedLine [LineChunk "('a','b')"]]
- DocTest.printPrefix "Data.Array.Comfort.Storable:188: "
-{-# LINE 188 "src/Data/Array/Comfort/Storable.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable:189: "
+{-# LINE 189 "src/Data/Array/Comfort/Storable.hs" #-}
  DocTest.example
-{-# LINE 188 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 189 "src/Data/Array/Comfort/Storable.hs" #-}
    ( let arr = Array.fromRecord ('a' :+ 'b') in
   let (real:+imag) = Shape.indexRecordFromShape $ Array.shape arr in
   (arr ! real, arr ! imag)
   )
   [ExpectedLine [LineChunk "('a','b')"]]
- DocTest.printPrefix "Data.Array.Comfort.Storable:303: "
-{-# LINE 303 "src/Data/Array/Comfort/Storable.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable:310: "
+{-# LINE 310 "src/Data/Array/Comfort/Storable.hs" #-}
  DocTest.property
-{-# LINE 303 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 310 "src/Data/Array/Comfort/Storable.hs" #-}
      (QC.forAll genNonEmptyArray2 $ \xs -> QC.forAll (QC.elements $ Shape.indices $ Array.shape xs) $ \(ix0,ix1) -> Array.pick xs ix0 ! ix1 == xs!(ix0,ix1))
- DocTest.printPrefix "Data.Array.Comfort.Storable:321: "
-{-# LINE 321 "src/Data/Array/Comfort/Storable.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable:328: "
+{-# LINE 328 "src/Data/Array/Comfort/Storable.hs" #-}
  DocTest.property
-{-# LINE 321 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 328 "src/Data/Array/Comfort/Storable.hs" #-}
      (QC.forAll genArray2 $ \xs -> xs == Array.fromRowArray (snd $ Array.shape xs) (Array.toRowArray xs))
- DocTest.printPrefix "Data.Array.Comfort.Storable:338: "
-{-# LINE 338 "src/Data/Array/Comfort/Storable.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable:345: "
+{-# LINE 345 "src/Data/Array/Comfort/Storable.hs" #-}
  DocTest.property
-{-# LINE 338 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 345 "src/Data/Array/Comfort/Storable.hs" #-}
      (forAllNonEmpty $ \xs -> Array.minimum xs ==? minimum (Array.toList xs))
- DocTest.printPrefix "Data.Array.Comfort.Storable:346: "
-{-# LINE 346 "src/Data/Array/Comfort/Storable.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable:353: "
+{-# LINE 353 "src/Data/Array/Comfort/Storable.hs" #-}
  DocTest.property
-{-# LINE 346 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 353 "src/Data/Array/Comfort/Storable.hs" #-}
      (forAllNonEmpty $ \xs -> Array.maximum xs ==? maximum (Array.toList xs))
- DocTest.printPrefix "Data.Array.Comfort.Storable:358: "
-{-# LINE 358 "src/Data/Array/Comfort/Storable.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable:365: "
+{-# LINE 365 "src/Data/Array/Comfort/Storable.hs" #-}
  DocTest.property
-{-# LINE 358 "src/Data/Array/Comfort/Storable.hs" #-}
+{-# LINE 365 "src/Data/Array/Comfort/Storable.hs" #-}
      (forAllNonEmpty $ \xs -> Array.limits xs ==? (Array.minimum xs, Array.maximum xs))
diff --git a/test/DocTest/Data/Array/Comfort/Storable/Unchecked.hs b/test/DocTest/Data/Array/Comfort/Storable/Unchecked.hs
--- a/test/DocTest/Data/Array/Comfort/Storable/Unchecked.hs
+++ b/test/DocTest/Data/Array/Comfort/Storable/Unchecked.hs
@@ -29,28 +29,28 @@
  DocTest.property
 {-# LINE 134 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
      (\x  ->  Array.singleton x ! () == (x::Word16))
- DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:155: "
-{-# LINE 155 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:148: "
+{-# LINE 148 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
  DocTest.property
-{-# LINE 155 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+{-# LINE 148 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
      (\(QC.NonNegative n) (Array16 x)  ->  x == Array.mapShape (Shape.ZeroBased . Shape.size) (Array.append (Array.take n x) (Array.drop n x)))
- DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:170: "
-{-# LINE 170 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:163: "
+{-# LINE 163 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
  DocTest.property
-{-# LINE 170 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+{-# LINE 163 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
      (\(Array16 x) (Array16 y) -> let xy = Array.append x y in x == Array.takeLeft xy  &&  y == Array.takeRight xy)
- DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:190: "
-{-# LINE 190 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:183: "
+{-# LINE 183 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
  DocTest.property
-{-# LINE 190 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+{-# LINE 183 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
      (\(Array16 x) (Array16 y) (Array16 z) -> let xyz = Array.append x $ Array.append y z in y == Array.takeCenter xyz)
- DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:203: "
-{-# LINE 203 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:196: "
+{-# LINE 196 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
  DocTest.property
-{-# LINE 203 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+{-# LINE 196 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
      (\(Array16 xs)  ->  Array.sum xs == sum (Array.toList xs))
- DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:209: "
-{-# LINE 209 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+ DocTest.printPrefix "Data.Array.Comfort.Storable.Unchecked:202: "
+{-# LINE 202 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
  DocTest.property
-{-# LINE 209 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
+{-# LINE 202 "src/Data/Array/Comfort/Storable/Unchecked.hs" #-}
      (\(Array16 xs)  ->  Array.product xs == product (Array.toList xs))
