diff --git a/grid.cabal b/grid.cabal
--- a/grid.cabal
+++ b/grid.cabal
@@ -1,5 +1,5 @@
 name:           grid
-version:        7.1
+version:        7.3
 synopsis:       Tools for working with regular grids (graphs, lattices).
 description:    Provides tools for working with regular arrangements
                 of tiles, such as might be used in a board game or some
diff --git a/src/Math/Geometry/Grid/HexagonalInternal.hs b/src/Math/Geometry/Grid/HexagonalInternal.hs
--- a/src/Math/Geometry/Grid/HexagonalInternal.hs
+++ b/src/Math/Geometry/Grid/HexagonalInternal.hs
@@ -1,7 +1,7 @@
 ------------------------------------------------------------------------
 -- |
 -- Module      :  Math.Geometry.HexGridInternal
--- Copyright   :  (c) Amy de Buitléir 2012
+-- Copyright   :  (c) Amy de Buitléir 2012-2013
 -- License     :  BSD-style
 -- Maintainer  :  amy@nualeargais.ie
 -- Stability   :  experimental
@@ -12,7 +12,7 @@
 -- without notice.
 --
 ------------------------------------------------------------------------
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE TypeFamilies, FlexibleContexts, DeriveGeneric #-}
 
 module Math.Geometry.Grid.HexagonalInternal where
 
@@ -20,15 +20,16 @@
 import Data.Function (on)
 import Data.List (groupBy, sortBy)
 import Data.Ord (comparing)
+import GHC.Generics (Generic)
 import Math.Geometry.GridInternal
 
 data HexDirection = West | Northwest | Northeast | East | Southeast | 
-                      Southwest deriving (Show, Eq)
+                      Southwest deriving (Show, Eq, Generic)
 
 -- | An unbounded grid with hexagonal tiles
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data UnboundedHexGrid = UnboundedHexGrid deriving Show
+data UnboundedHexGrid = UnboundedHexGrid deriving (Show, Eq, Generic)
 
 instance Grid UnboundedHexGrid where
   type Index UnboundedHexGrid = (Int, Int)
@@ -63,7 +64,7 @@
 -- | A hexagonal grid with hexagonal tiles
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data HexHexGrid = HexHexGrid Int [(Int, Int)] deriving Eq
+data HexHexGrid = HexHexGrid Int [(Int, Int)] deriving (Eq, Generic)
 
 instance Show HexHexGrid where show (HexHexGrid s _) = "hexHexGrid " ++ show s
 
@@ -113,7 +114,8 @@
 -- | A parallelogramatical grid with hexagonal tiles
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data ParaHexGrid = ParaHexGrid (Int, Int) [(Int, Int)] deriving Eq
+data ParaHexGrid = ParaHexGrid (Int, Int) [(Int, Int)]
+  deriving (Eq, Generic)
 
 instance Show ParaHexGrid where 
   show (ParaHexGrid (r,c) _) = "paraHexGrid " ++ show r ++ " " ++ show c
diff --git a/src/Math/Geometry/Grid/HexagonalInternal2.hs b/src/Math/Geometry/Grid/HexagonalInternal2.hs
--- a/src/Math/Geometry/Grid/HexagonalInternal2.hs
+++ b/src/Math/Geometry/Grid/HexagonalInternal2.hs
@@ -12,20 +12,21 @@
 -- without notice.
 --
 ------------------------------------------------------------------------
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE TypeFamilies, FlexibleContexts, DeriveGeneric #-}
 
 module Math.Geometry.Grid.HexagonalInternal2 where
 
 import Prelude hiding (null)
+import GHC.Generics (Generic)
 import Math.Geometry.GridInternal
 
 data HexDirection = Northwest | North | Northeast | Southeast | South |
-                      Southwest deriving (Show, Eq)
+                      Southwest deriving (Show, Eq, Generic)
 
 -- | An unbounded grid with hexagonal tiles
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data UnboundedHexGrid = UnboundedHexGrid deriving Show
+data UnboundedHexGrid = UnboundedHexGrid deriving (Eq, Show, Generic)
 
 instance Grid UnboundedHexGrid where
   type Index UnboundedHexGrid = (Int, Int)
@@ -60,7 +61,7 @@
 -- | A hexagonal grid with hexagonal tiles
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data HexHexGrid = HexHexGrid Int [(Int, Int)] deriving Eq
+data HexHexGrid = HexHexGrid Int [(Int, Int)] deriving (Eq, Generic)
 
 instance Show HexHexGrid where show (HexHexGrid s _) = "hexHexGrid " ++ show s
 
@@ -110,7 +111,8 @@
 -- | A rectangular grid with hexagonal tiles
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data RectHexGrid = RectHexGrid (Int, Int) [(Int, Int)] deriving Eq
+data RectHexGrid = RectHexGrid (Int, Int) [(Int, Int)]
+  deriving (Eq, Generic)
 
 instance Show RectHexGrid where 
   show (RectHexGrid (r,c) _) = "rectHexGrid " ++ show r ++ " " ++ show c
diff --git a/src/Math/Geometry/Grid/OctagonalInternal.hs b/src/Math/Geometry/Grid/OctagonalInternal.hs
--- a/src/Math/Geometry/Grid/OctagonalInternal.hs
+++ b/src/Math/Geometry/Grid/OctagonalInternal.hs
@@ -12,22 +12,24 @@
 -- without notice.
 --
 ------------------------------------------------------------------------
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE TypeFamilies, FlexibleContexts, DeriveGeneric #-}
 
 module Math.Geometry.Grid.OctagonalInternal where
 
 import Prelude hiding (null)
 
 import Data.List (nub)
+import GHC.Generics (Generic)
 import Math.Geometry.GridInternal
 
 data OctDirection = West | Northwest | North | Northeast | East | 
-                      Southeast | South | Southwest deriving (Show, Eq)
+                      Southeast | South | Southwest
+                        deriving (Show, Eq, Generic)
 
 -- | An unbounded grid with octagonal tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data UnboundedOctGrid = UnboundedOctGrid deriving Show
+data UnboundedOctGrid = UnboundedOctGrid deriving (Eq, Show, Generic)
 
 instance Grid UnboundedOctGrid where
   type Index UnboundedOctGrid = (Int, Int)
@@ -59,7 +61,8 @@
 -- | A rectangular grid with octagonal tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data RectOctGrid = RectOctGrid (Int, Int) [(Int, Int)] deriving Eq
+data RectOctGrid = RectOctGrid (Int, Int) [(Int, Int)]
+  deriving (Eq, Generic)
 
 instance Show RectOctGrid where 
   show (RectOctGrid (r,c) _) = 
@@ -102,7 +105,8 @@
 -- | A toroidal grid with octagonal tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data TorOctGrid = TorOctGrid (Int, Int) [(Int, Int)] deriving Eq
+data TorOctGrid = TorOctGrid (Int, Int) [(Int, Int)]
+  deriving (Eq, Generic)
 
 instance Show TorOctGrid where 
   show (TorOctGrid (r,c) _) = "torOctGrid " ++ show r ++ " " ++ show c
diff --git a/src/Math/Geometry/Grid/SquareInternal.hs b/src/Math/Geometry/Grid/SquareInternal.hs
--- a/src/Math/Geometry/Grid/SquareInternal.hs
+++ b/src/Math/Geometry/Grid/SquareInternal.hs
@@ -1,7 +1,7 @@
 ------------------------------------------------------------------------
 -- |
 -- Module      :  Math.Geometry.SquareGridInternal
--- Copyright   :  (c) Amy de Buitléir 2012
+-- Copyright   :  (c) Amy de Buitléir 2012-2013
 -- License     :  BSD-style
 -- Maintainer  :  amy@nualeargais.ie
 -- Stability   :  experimental
@@ -12,21 +12,24 @@
 -- without notice.
 --
 ------------------------------------------------------------------------
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE TypeFamilies, FlexibleContexts, DeriveGeneric #-}
 
 module Math.Geometry.Grid.SquareInternal where
 
 import Prelude hiding (null)
 
 import Data.List (nub)
+import GHC.Generics (Generic)
 import Math.Geometry.GridInternal
 
-data SquareDirection = North | East | South | West deriving (Show, Eq)
+data SquareDirection = North | East | South | West
+  deriving (Show, Eq)
 
 -- | An unbounded grid with square tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data UnboundedSquareGrid = UnboundedSquareGrid deriving Show
+data UnboundedSquareGrid = UnboundedSquareGrid
+  deriving (Eq, Show, Generic)
 
 instance Grid UnboundedSquareGrid where
   type Index UnboundedSquareGrid = (Int, Int)
@@ -50,7 +53,8 @@
 -- | A rectangular grid with square tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data RectSquareGrid = RectSquareGrid (Int, Int) [(Int, Int)] deriving Eq
+data RectSquareGrid = RectSquareGrid (Int, Int) [(Int, Int)]
+  deriving  (Eq, Generic)
 
 instance Show RectSquareGrid where 
   show (RectSquareGrid (r,c) _) = 
@@ -99,7 +103,8 @@
 -- | A toroidal grid with square tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data TorSquareGrid = TorSquareGrid (Int, Int) [(Int, Int)] deriving Eq
+data TorSquareGrid = TorSquareGrid (Int, Int) [(Int, Int)]
+  deriving  (Eq, Generic)
 
 instance Show TorSquareGrid where 
   show (TorSquareGrid (r,c) _) = "torSquareGrid " ++ show r ++ " " ++ show c
diff --git a/src/Math/Geometry/Grid/TriangularInternal.hs b/src/Math/Geometry/Grid/TriangularInternal.hs
--- a/src/Math/Geometry/Grid/TriangularInternal.hs
+++ b/src/Math/Geometry/Grid/TriangularInternal.hs
@@ -1,7 +1,7 @@
 ------------------------------------------------------------------------
 -- |
 -- Module      :  Math.Geometry.TriGridInternal
--- Copyright   :  (c) Amy de Buitléir 2012
+-- Copyright   :  (c) Amy de Buitléir 2012-2013
 -- License     :  BSD-style
 -- Maintainer  :  amy@nualeargais.ie
 -- Stability   :  experimental
@@ -12,22 +12,24 @@
 -- without notice.
 --
 ------------------------------------------------------------------------
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE TypeFamilies, FlexibleContexts, DeriveGeneric #-}
 
 module Math.Geometry.Grid.TriangularInternal where
 
 import Prelude hiding (null)
 
 import Data.List (nub)
+import GHC.Generics (Generic)
 import Math.Geometry.GridInternal
 
 data TriDirection = South | Northwest | Northeast | 
-                      North | Southeast | Southwest deriving (Show, Eq)
+                      North | Southeast | Southwest
+                        deriving (Show, Eq, Generic)
 
 -- | An unbounded grid with triangular tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data UnboundedTriGrid = UnboundedTriGrid deriving Show
+data UnboundedTriGrid = UnboundedTriGrid deriving (Eq, Show, Generic)
 
 instance Grid UnboundedTriGrid where
   type Index UnboundedTriGrid = (Int, Int)
@@ -69,7 +71,7 @@
 -- | A triangular grid with triangular tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data TriTriGrid = TriTriGrid Int [(Int, Int)] deriving Eq
+data TriTriGrid = TriTriGrid Int [(Int, Int)] deriving (Eq, Generic)
 
 instance Show TriTriGrid where 
   show (TriTriGrid s _) = "triTriGrid " ++ show s
@@ -124,7 +126,8 @@
 -- | A Parallelogrammatical grid with triangular tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data ParaTriGrid = ParaTriGrid (Int, Int) [(Int, Int)] deriving Eq
+data ParaTriGrid = ParaTriGrid (Int, Int) [(Int, Int)]
+  deriving  (Eq, Generic)
 
 instance Show ParaTriGrid where 
   show (ParaTriGrid (r,c) _) = "paraTriGrid " ++ show r ++ " " ++ show c
@@ -187,7 +190,8 @@
 -- | A rectangular grid with triangular tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data RectTriGrid = RectTriGrid (Int, Int) [(Int, Int)] deriving Eq
+data RectTriGrid = RectTriGrid (Int, Int) [(Int, Int)]
+  deriving  (Eq, Generic)
 
 instance Show RectTriGrid where 
   show (RectTriGrid (r,c) _) = "rectTriGrid " ++ show r ++ " " ++ show c
@@ -229,7 +233,8 @@
 -- | A toroidal grid with triangular tiles.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data TorTriGrid = TorTriGrid (Int, Int) [(Int, Int)] deriving Eq
+data TorTriGrid = TorTriGrid (Int, Int) [(Int, Int)]
+  deriving  (Eq, Generic)
 
 instance Show TorTriGrid where 
   show (TorTriGrid (r,c) _) = "torTriGrid " ++ show r ++ " " ++ show c
@@ -280,7 +285,8 @@
 --   along the y-axis.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data YCylTriGrid = YCylTriGrid (Int, Int) [(Int, Int)] deriving Eq
+data YCylTriGrid = YCylTriGrid (Int, Int) [(Int, Int)]
+  deriving  (Eq, Generic)
 
 instance Show YCylTriGrid where 
   show (YCylTriGrid (r,c) _) = "yCylTriGrid " ++ show r ++ " " ++ show c
@@ -325,7 +331,8 @@
 --   along the x-axis.
 --   The grid and its indexing scheme are illustrated in the user guide,
 --   available at <https://github.com/mhwombat/grid/wiki>.
-data XCylTriGrid = XCylTriGrid (Int, Int) [(Int, Int)] deriving Eq
+data XCylTriGrid = XCylTriGrid (Int, Int) [(Int, Int)]
+  deriving  (Eq, Generic)
 
 instance Show XCylTriGrid where 
   show (XCylTriGrid (r,c) _) = "yCylTriGrid " ++ show r ++ " " ++ show c
diff --git a/src/Math/Geometry/GridMap.hs b/src/Math/Geometry/GridMap.hs
--- a/src/Math/Geometry/GridMap.hs
+++ b/src/Math/Geometry/GridMap.hs
@@ -13,8 +13,7 @@
 -- into a single type.
 --
 ------------------------------------------------------------------------
-{-# LANGUAGE TypeFamilies, FlexibleContexts, MultiParamTypeClasses,
-    UndecidableInstances #-}
+{-# LANGUAGE TypeFamilies, FlexibleContexts, MultiParamTypeClasses #-}
 
 module Math.Geometry.GridMap
   (
diff --git a/src/Math/Geometry/GridMap/Lazy.hs b/src/Math/Geometry/GridMap/Lazy.hs
--- a/src/Math/Geometry/GridMap/Lazy.hs
+++ b/src/Math/Geometry/GridMap/Lazy.hs
@@ -14,7 +14,7 @@
 --
 ------------------------------------------------------------------------
 {-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances,
-    MultiParamTypeClasses, UndecidableInstances #-}
+    MultiParamTypeClasses, UndecidableInstances, DeriveGeneric #-}
 
 module Math.Geometry.GridMap.Lazy
   (
@@ -29,12 +29,14 @@
 import qualified Data.Map as M
 --import qualified Data.Map.Strict as Strict (Map)
 import Data.Maybe (fromMaybe)
+import GHC.Generics (Generic)
 import qualified Math.Geometry.Grid as G
 import Math.Geometry.GridMap
 
 -- | A map from tile positions in a grid to values.
 data LGridMap g v =
   LGridMap { lgmGrid :: g, lgmMap :: M.Map (G.Index g) v }
+    deriving Generic
 
 -- | Construct a grid map which is strict in the keys (tile positions), but
 --   lazy in the values.
