diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,3 +3,11 @@
 #### 0.1.0.0
 
 - Initial version
+
+#### 0.1.0.1
+
+- Relax base library constraints
+
+#### 0.1.1.0
+
+- Remove toArrayG function and add some documentation.
diff --git a/Data/Array/Internal.hs b/Data/Array/Internal.hs
--- a/Data/Array/Internal.hs
+++ b/Data/Array/Internal.hs
@@ -45,6 +45,8 @@
 -- constraint on the elements, which VecElem allows you to express.
 -- For vector types that don't need the constraint it can be set
 -- to some dummy class.
+-- | The 'Vector' class is the interface to the underlying storage for the arrays.
+-- The operations map straight to operations for 'Vector'.
 class Vector v where
   type VecElem v :: Type -> Constraint
   vIndex    :: (VecElem v a) => v a -> Int -> a
@@ -134,6 +136,7 @@
 
 instance NFData (v a) => NFData (T v a)
 
+-- | The shape of an array is a list of its dimensions.
 type ShapeL = [Int]
 
 badShape :: ShapeL -> Bool
diff --git a/Data/Array/Internal/Dynamic.hs b/Data/Array/Internal/Dynamic.hs
--- a/Data/Array/Internal/Dynamic.hs
+++ b/Data/Array/Internal/Dynamic.hs
@@ -23,7 +23,6 @@
 {-# LANGUAGE UndecidableInstances #-}
 module Data.Array.Internal.Dynamic(
   Array(..), Vector, ShapeL,
-  toArrayG,
   size, shapeL, rank,
   toList, fromList, toVector, fromVector,
   normalize,
@@ -108,9 +107,6 @@
   deriving (Pretty, Generic, Data)
 
 instance NFData a => NFData (Array a)
-
-toArrayG :: Array a -> G.Array V.Vector a
-toArrayG = unA
 
 instance (Show a) => Show (Array a) where
   showsPrec p = showsPrec p . unA
diff --git a/Data/Array/Internal/DynamicS.hs b/Data/Array/Internal/DynamicS.hs
--- a/Data/Array/Internal/DynamicS.hs
+++ b/Data/Array/Internal/DynamicS.hs
@@ -25,7 +25,6 @@
 {-# LANGUAGE UndecidableInstances #-}
 module Data.Array.Internal.DynamicS(
   Array(..), Vector, ShapeL, V.Storable, Unbox,
-  toArrayG,
   size, shapeL, rank,
   toList, fromList, toVector, fromVector,
   normalize,
@@ -115,9 +114,6 @@
   deriving (Pretty, Generic, Data)
 
 instance NFData a => NFData (Array a)
-
-toArrayG :: Array a -> G.Array V.Vector a
-toArrayG = unA
 
 instance (Show a, Unbox a) => Show (Array a) where
   showsPrec p = showsPrec p . unA
diff --git a/Data/Array/Internal/DynamicU.hs b/Data/Array/Internal/DynamicU.hs
--- a/Data/Array/Internal/DynamicU.hs
+++ b/Data/Array/Internal/DynamicU.hs
@@ -24,7 +24,6 @@
 {-# LANGUAGE UndecidableInstances #-}
 module Data.Array.Internal.DynamicU(
   Array(..), Vector, ShapeL, Unbox,
-  toArrayG,
   size, shapeL, rank,
   toList, fromList, toVector, fromVector,
   normalize,
@@ -112,9 +111,6 @@
   deriving (Pretty, Generic, Data)
 
 instance NFData a => NFData (Array a)
-
-toArrayG :: Array a -> G.Array V.Vector a
-toArrayG = unA
 
 instance (Show a, Unbox a) => Show (Array a) where
   showsPrec p = showsPrec p . unA
diff --git a/Data/Array/Internal/Ranked.hs b/Data/Array/Internal/Ranked.hs
--- a/Data/Array/Internal/Ranked.hs
+++ b/Data/Array/Internal/Ranked.hs
@@ -29,7 +29,6 @@
 {-# LANGUAGE UndecidableInstances #-}
 module Data.Array.Internal.Ranked(
   Array(..), Vector, ShapeL,
-  toArrayG,
   size, shapeL, rank,
   toList, fromList, toVector, fromVector,
   normalize,
@@ -66,9 +65,6 @@
   deriving (Pretty, Generic, Data)
 
 instance NFData a => NFData (Array n a)
-
-toArrayG :: Array r a -> G.Array r V.Vector a
-toArrayG = unA
 
 instance (Show a) => Show (Array n a) where
   showsPrec p = showsPrec p . unA
diff --git a/Data/Array/Internal/RankedS.hs b/Data/Array/Internal/RankedS.hs
--- a/Data/Array/Internal/RankedS.hs
+++ b/Data/Array/Internal/RankedS.hs
@@ -29,7 +29,6 @@
 {-# LANGUAGE UndecidableInstances #-}
 module Data.Array.Internal.RankedS(
   Array(..), Vector, ShapeL, Unbox,
-  toArrayG,
   size, shapeL, rank,
   toList, fromList, toVector, fromVector,
   normalize,
@@ -69,9 +68,6 @@
   deriving (Pretty, Generic, Data)
 
 instance NFData a => NFData (Array n a)
-
-toArrayG :: Array r a -> G.Array r V.Vector a
-toArrayG = unA
 
 instance (Show a, Unbox a) => Show (Array n a) where
   showsPrec p = showsPrec p . unA
diff --git a/Data/Array/Internal/RankedU.hs b/Data/Array/Internal/RankedU.hs
--- a/Data/Array/Internal/RankedU.hs
+++ b/Data/Array/Internal/RankedU.hs
@@ -29,7 +29,6 @@
 {-# LANGUAGE UndecidableInstances #-}
 module Data.Array.Internal.RankedU(
   Array(..), Vector, ShapeL, Unbox,
-  toArrayG,
   size, shapeL, rank,
   toList, fromList, toVector, fromVector,
   normalize,
@@ -68,9 +67,6 @@
   deriving (Pretty, Generic, Data)
 
 instance NFData a => NFData (Array n a)
-
-toArrayG :: Array r a -> G.Array r V.Vector a
-toArrayG = unA
 
 instance (Show a, Unbox a) => Show (Array n a) where
   showsPrec p = showsPrec p . unA
diff --git a/Data/Array/Internal/Shaped.hs b/Data/Array/Internal/Shaped.hs
--- a/Data/Array/Internal/Shaped.hs
+++ b/Data/Array/Internal/Shaped.hs
@@ -29,7 +29,6 @@
 module Data.Array.Internal.Shaped(
   Array(..), Shape(..), Size, Rank, Vector, ShapeL,
   Window, Stride, Permute, Permutation, ValidDims,
-  toArrayG,
   size, shapeL, rank,
   toList, fromList, toVector, fromVector,
   normalize,
@@ -66,9 +65,6 @@
   deriving (Pretty, Generic, Data)
 
 instance NFData a => NFData (Array sh a)
-
-toArrayG :: Array sh a -> G.Array sh V.Vector a
-toArrayG = unA
 
 instance (Show a, Shape sh) => Show (Array sh a) where
   showsPrec p = showsPrec p . unA
diff --git a/Data/Array/Internal/ShapedS.hs b/Data/Array/Internal/ShapedS.hs
--- a/Data/Array/Internal/ShapedS.hs
+++ b/Data/Array/Internal/ShapedS.hs
@@ -30,7 +30,6 @@
 module Data.Array.Internal.ShapedS(
   Array(..), Shape(..), Size, Rank, Vector, ShapeL, Unbox,
   Window, Stride, Permute, Permutation, ValidDims,
-  toArrayG,
   size, shapeL, rank,
   toList, fromList, toVector, fromVector,
   normalize,
@@ -70,9 +69,6 @@
   deriving (Pretty, Generic, Data)
 
 instance NFData a => NFData (Array sh a)
-
-toArrayG :: Array sh a -> G.Array sh V.Vector a
-toArrayG = unA
 
 instance (Unbox a, Show a, Shape sh) => Show (Array sh a) where
   showsPrec p = showsPrec p . unA
diff --git a/Data/Array/Internal/ShapedU.hs b/Data/Array/Internal/ShapedU.hs
--- a/Data/Array/Internal/ShapedU.hs
+++ b/Data/Array/Internal/ShapedU.hs
@@ -30,7 +30,6 @@
 module Data.Array.Internal.ShapedU(
   Array(..), Shape(..), Size, Rank, Vector, ShapeL, Unbox,
   Window, Stride, Permute, Permutation, ValidDims,
-  toArrayG,
   size, shapeL, rank,
   toList, fromList, toVector, fromVector,
   normalize,
@@ -68,9 +67,6 @@
   deriving (Pretty, Generic, Data)
 
 instance NFData a => NFData (Array sh a)
-
-toArrayG :: Array sh a -> G.Array sh V.Vector a
-toArrayG = unA
 
 instance (Unbox a, Show a, Shape sh) => Show (Array sh a) where
   showsPrec p = showsPrec p . unA
diff --git a/orthotope.cabal b/orthotope.cabal
--- a/orthotope.cabal
+++ b/orthotope.cabal
@@ -1,5 +1,5 @@
 name:                orthotope
-version:             0.1.0.1
+version:             0.1.1.0
 synopsis:            Multidimensional arrays inspired by APL
 license:             Apache
 license-file:        LICENSE
@@ -54,7 +54,7 @@
                      , Data.Array.Internal.ShapedS
                      , Data.Array.Internal.ShapedU
 
-  build-depends:       base >= 4.10 && < 4.17
+  build-depends:       base >= 4.12 && < 4.18
                      , deepseq
                      , dlist
                      , pretty
