diff --git a/generic-deriving.cabal b/generic-deriving.cabal
--- a/generic-deriving.cabal
+++ b/generic-deriving.cabal
@@ -1,5 +1,5 @@
 name:                   generic-deriving
-version:                0.3.1
+version:                0.4
 synopsis:               Generic programming library for generalized deriving.
 description:
 
@@ -26,6 +26,7 @@
   hs-source-dirs:       src
   exposed-modules:      Generics.Deriving
                         Generics.Deriving.Base
+                        Generics.Deriving.Instances
 
                         -- Generics.Deriving.Data
                         Generics.Deriving.Enum
diff --git a/src/Generics/Deriving/Base.hs b/src/Generics/Deriving/Base.hs
--- a/src/Generics/Deriving/Base.hs
+++ b/src/Generics/Deriving/Base.hs
@@ -26,10 +26,6 @@
 #else
   module UHC.Generics,
 #endif
-  -- * Representations for base types
-    Rep0Char, Rep0Int, Rep0Float
-  , Rep0Maybe, Rep1Maybe
-  , Rep0List, Rep1List
 
   ) where
 
@@ -222,97 +218,3 @@
   to1    :: rep a -> f a
 
 #endif
---------------------------------------------------------------------------------
--- Representation for base types
---------------------------------------------------------------------------------
-
--- Representation types
-{-
-type Rep1Par1 = Par1
-instance Representable1 Par1 Rep1Par1 where
-  from1 = id
-  to1 = id
-
-type Rep1Rec1 f = Rec1 f
-instance Representable1 (Rec1 f) (Rep1Rec1 f) where
-  from1 = id
-  to1 = id
--}
--- Kind *
-
-type Rep0Char = Rec0 Char
-instance Representable0 Char Rep0Char where
-  from0 = K1
-  to0 = unK1
-
-type Rep0Int = Rec0 Int
-instance Representable0 Int Rep0Int where
-  from0 = K1
-  to0 = unK1
-
-type Rep0Float = Rec0 Float
-instance Representable0 Float Rep0Float where
-  from0 = K1
-  to0 = unK1
-
--- etc...
-
--- Kind * -> *
-
-data Maybe_
-data Nothing_
-data Just_
-
-instance Datatype Maybe_ where
-  datatypeName _ = "Maybe"
-  moduleName   _ = "Representation"
-
-instance Constructor Nothing_ where
-  conName _ = "Nothing"
-
-instance Constructor Just_ where
-  conName _ = "Just"
-
-type Rep0Maybe a = D1 Maybe_ (C1 Nothing_ U1 :+: C1 Just_ (Par0 a))
-instance Representable0 (Maybe a) (Rep0Maybe a) where
-  from0 Nothing  = M1 (L1 (M1 U1))
-  from0 (Just x) = M1 (R1 (M1 (K1 x)))
-  to0 (M1 (L1 (M1 U1)))     = Nothing
-  to0 (M1 (R1 (M1 (K1 x)))) = Just x
-
-type Rep1Maybe = D1 Maybe_ (C1 Nothing_ U1 :+: C1 Just_ Par1)
-instance Representable1 Maybe Rep1Maybe where
-  from1 Nothing  = M1 (L1 (M1 U1))
-  from1 (Just x) = M1 (R1 (M1 (Par1 x)))
-  to1 (M1 (L1 (M1 U1)))       = Nothing
-  to1 (M1 (R1 (M1 (Par1 x)))) = Just x
-
-
-data List__
-data Nil__
-data Cons__
-
-instance Datatype [a] where
-  datatypeName _ = "[]"
-  moduleName   _ = "Data.List"
-
-instance Constructor Nil__  where conName _ = "[]"
-instance Constructor Cons__ where
-  conName   _ = ":"
-  conFixity _ = Infix RightAssociative 5
-
-type Rep0List a = D1 List__ ((C1 Nil__ U1) :+: (C1 Cons__ (Par0 a :*: Rec0 [a])))
-instance Representable0 [a] (Rep0List a) where
-  from0 []    = M1 (L1 (M1 U1))
-  from0 (h:t) = M1 (R1 (M1 (K1 h :*: K1 t)))
-  to0 (M1 (L1 (M1 U1)))              = []
-  to0 (M1 (R1 (M1 (K1 h :*: K1 t)))) = h : t
-
-type Rep1List = D1 List__ ((C1 Nil__ U1) :+: (C1 Cons__ (Par1 :*: Rec1 [])))
-instance Representable1 [] Rep1List where
-  from1 []    = M1 (L1 (M1 U1))
-  from1 (h:t) = M1 (R1 (M1 (Par1 h :*: Rec1 t)))
-  to1 (M1 (L1 (M1 U1)))                  = []
-  to1 (M1 (R1 (M1 (Par1 h :*: Rec1 t)))) = h : t
-
--- etc...
diff --git a/src/Generics/Deriving/Enum.hs b/src/Generics/Deriving/Enum.hs
--- a/src/Generics/Deriving/Enum.hs
+++ b/src/Generics/Deriving/Enum.hs
@@ -22,6 +22,7 @@
 
 
 import Generics.Deriving.Base
+import Generics.Deriving.Instances
 import Generics.Deriving.Eq
 
 
diff --git a/src/Generics/Deriving/Eq.hs b/src/Generics/Deriving/Eq.hs
--- a/src/Generics/Deriving/Eq.hs
+++ b/src/Generics/Deriving/Eq.hs
@@ -15,6 +15,7 @@
 
 
 import Generics.Deriving.Base
+import Generics.Deriving.Instances
 
 --------------------------------------------------------------------------------
 -- Generic show
diff --git a/src/Generics/Deriving/Functor.hs b/src/Generics/Deriving/Functor.hs
--- a/src/Generics/Deriving/Functor.hs
+++ b/src/Generics/Deriving/Functor.hs
@@ -12,6 +12,7 @@
   ) where
 
 import Generics.Deriving.Base
+import Generics.Deriving.Instances
 
 --------------------------------------------------------------------------------
 -- Generic fmap
diff --git a/src/Generics/Deriving/Instances.hs b/src/Generics/Deriving/Instances.hs
new file mode 100644
--- /dev/null
+++ b/src/Generics/Deriving/Instances.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE EmptyDataDecls #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TypeSynonymInstances #-}
+{-# LANGUAGE TypeOperators #-}
+
+module Generics.Deriving.Instances (
+  -- * Representations for base types
+    Rep0Char, Rep0Int, Rep0Float
+  , Rep0Maybe, Rep1Maybe
+  , Rep0List, Rep1List
+  ) where
+
+import Generics.Deriving.Base
+
+--------------------------------------------------------------------------------
+-- Representation for base types
+--------------------------------------------------------------------------------
+
+-- Representation types
+{-
+type Rep1Par1 = Par1
+instance Representable1 Par1 Rep1Par1 where
+  from1 = id
+  to1 = id
+
+type Rep1Rec1 f = Rec1 f
+instance Representable1 (Rec1 f) (Rep1Rec1 f) where
+  from1 = id
+  to1 = id
+-}
+-- Kind *
+
+type Rep0Char = Rec0 Char
+instance Representable0 Char Rep0Char where
+  from0 = K1
+  to0 = unK1
+
+type Rep0Int = Rec0 Int
+instance Representable0 Int Rep0Int where
+  from0 = K1
+  to0 = unK1
+
+type Rep0Float = Rec0 Float
+instance Representable0 Float Rep0Float where
+  from0 = K1
+  to0 = unK1
+
+-- etc...
+
+-- Kind * -> *
+
+data Maybe_
+data Nothing_
+data Just_
+
+instance Datatype Maybe_ where
+  datatypeName _ = "Maybe"
+  moduleName   _ = "Representation"
+
+instance Constructor Nothing_ where
+  conName _ = "Nothing"
+
+instance Constructor Just_ where
+  conName _ = "Just"
+
+type Rep0Maybe a = D1 Maybe_ (C1 Nothing_ U1 :+: C1 Just_ (Par0 a))
+instance Representable0 (Maybe a) (Rep0Maybe a) where
+  from0 Nothing  = M1 (L1 (M1 U1))
+  from0 (Just x) = M1 (R1 (M1 (K1 x)))
+  to0 (M1 (L1 (M1 U1)))     = Nothing
+  to0 (M1 (R1 (M1 (K1 x)))) = Just x
+
+type Rep1Maybe = D1 Maybe_ (C1 Nothing_ U1 :+: C1 Just_ Par1)
+instance Representable1 Maybe Rep1Maybe where
+  from1 Nothing  = M1 (L1 (M1 U1))
+  from1 (Just x) = M1 (R1 (M1 (Par1 x)))
+  to1 (M1 (L1 (M1 U1)))       = Nothing
+  to1 (M1 (R1 (M1 (Par1 x)))) = Just x
+
+
+data List__
+data Nil__
+data Cons__
+
+instance Datatype [a] where
+  datatypeName _ = "[]"
+  moduleName   _ = "Data.List"
+
+instance Constructor Nil__  where conName _ = "[]"
+instance Constructor Cons__ where
+  conName   _ = ":"
+  conFixity _ = Infix RightAssociative 5
+
+type Rep0List a = D1 List__ ((C1 Nil__ U1) :+: (C1 Cons__ (Par0 a :*: Rec0 [a])))
+instance Representable0 [a] (Rep0List a) where
+  from0 []    = M1 (L1 (M1 U1))
+  from0 (h:t) = M1 (R1 (M1 (K1 h :*: K1 t)))
+  to0 (M1 (L1 (M1 U1)))              = []
+  to0 (M1 (R1 (M1 (K1 h :*: K1 t)))) = h : t
+
+type Rep1List = D1 List__ ((C1 Nil__ U1) :+: (C1 Cons__ (Par1 :*: Rec1 [])))
+instance Representable1 [] Rep1List where
+  from1 []    = M1 (L1 (M1 U1))
+  from1 (h:t) = M1 (R1 (M1 (Par1 h :*: Rec1 t)))
+  to1 (M1 (L1 (M1 U1)))                  = []
+  to1 (M1 (R1 (M1 (Par1 h :*: Rec1 t)))) = h : t
+
+-- etc...
diff --git a/src/Generics/Deriving/Show.hs b/src/Generics/Deriving/Show.hs
--- a/src/Generics/Deriving/Show.hs
+++ b/src/Generics/Deriving/Show.hs
@@ -16,6 +16,7 @@
 
 
 import Generics.Deriving.Base
+import Generics.Deriving.Instances
 
 --------------------------------------------------------------------------------
 -- Generic show
diff --git a/src/Generics/Deriving/Uniplate.hs b/src/Generics/Deriving/Uniplate.hs
--- a/src/Generics/Deriving/Uniplate.hs
+++ b/src/Generics/Deriving/Uniplate.hs
@@ -15,6 +15,7 @@
 
 
 import Generics.Deriving.Base
+import Generics.Deriving.Instances
 
 --------------------------------------------------------------------------------
 -- Generic Uniplate
