diff --git a/names.cabal b/names.cabal
--- a/names.cabal
+++ b/names.cabal
@@ -1,7 +1,9 @@
 Name:           names
-Version:        0.1
+Version:        0.2
 Synopsis:       Types that symbolise Names.
-Description:    Types that symbolise Names.               
+Description:    Types that symbolise Names.  
+                .
+                v0.2: Show Instances added         
 License:        MIT
 License-File:   LICENSE
 Author:         Julian Fleischer <julian.fleischer@fu-berlin.de>
@@ -18,7 +20,7 @@
     Other-Modules:      Data.Name.Internal.Names,
                         Data.Name.Internal.TH
 
-    Build-Depends:      base >= 4.5 && < 5,
+    Build-Depends:      base >= 4 && < 5,
                         template-haskell >= 2.7
 
     Hs-Source-Dirs:     src
diff --git a/src/Data/Name.hs b/src/Data/Name.hs
--- a/src/Data/Name.hs
+++ b/src/Data/Name.hs
@@ -1,4 +1,6 @@
 {-# LANGUAGE Haskell2010
+    , ScopedTypeVariables
+    , TypeOperators
  #-}
 
 module Data.Name (
@@ -9,5 +11,11 @@
 
 import Data.Name.Internal.Names
 import Data.Name.Internal.TH
+
+
+instance (Show a, Show b) => Show (a :& b) where
+    show _ = let showA = show :: a -> String
+                 showB = show :: b -> String
+             in showA undefined ++ showB undefined
 
 
diff --git a/src/Data/Name/Internal/Names.hs b/src/Data/Name/Internal/Names.hs
--- a/src/Data/Name/Internal/Names.hs
+++ b/src/Data/Name/Internal/Names.hs
@@ -8,6 +8,6 @@
 import qualified Data.Name.Internal.TH as TH
 
 
-TH.names ['\1' .. '\65535']
+TH.names ['\1' .. '\255']
 
 
diff --git a/src/Data/Name/Internal/TH.hs b/src/Data/Name/Internal/TH.hs
--- a/src/Data/Name/Internal/TH.hs
+++ b/src/Data/Name/Internal/TH.hs
@@ -4,7 +4,7 @@
  #-}
 
 module Data.Name.Internal.TH (
-    name, nameT, names, (:&), toName
+    name, nameT, nameV, names, (:&), toName
 ) where
 
 
@@ -15,17 +15,25 @@
 
 data a :& b
 
-infixr 3 :&
+infixr 4 :&
 
 
+name :: String -> Q [Dec]
+name str = do
+    t <- nameT str
+    let sig = SigD (mkName str) t
+        def = ValD (VarP $ mkName str) (NormalB (VarE 'undefined)) []
+    return [sig, def]
+
+
 nameT :: String -> Q Type
 nameT str = return $ foldr f (conT $ last names) (init names)
-    where names = map toName str
-          conT n = ConT $ mkName ("Data.Name." ++ n)
-          f x xs = AppT (AppT (ConT ''(:&)) (conT x)) xs
+  where names = map toName str
+        conT n = ConT $ mkName ("Data.Name." ++ n)
+        f x xs = AppT (AppT (ConT ''(:&)) (conT x)) xs
 
-name :: String -> Q Exp
-name str = nameT str >>= return . SigE (VarE 'undefined)
+nameV :: String -> Q Exp
+nameV str = nameT str >>= return . SigE (VarE 'undefined)
 
 toName c
   | c `elem` ['0'..'9'] = 'D' : [c]
@@ -34,9 +42,17 @@
     where padLeft str = replicate (4 - length str) '0' ++ str
 
 names chars = do
-    let alpha    = filter isAlpha chars
-        alphaNum = filter isAlphaNum chars
-        dataD = \n -> DataD [] (mkName n) [] [] []
+    let alpha     = filter isAlpha chars
+        alphaNum  = filter isAlphaNum chars
+        dataD n   = DataD [] (mkName n) [] [] []
+        showI c n = InstanceD [] (
+                        AppT
+                            (ConT ''Show)
+                            (ConT (mkName n))
+                    ) [FunD 'show [Clause [WildP]
+                                          (NormalB (LitE (StringL [c])))
+                                          []]]
+        fold c xs = let n = toName c in dataD n : showI c n : xs
 
-    return [ dataD $ toName c | c <- alphaNum ]
+    return $ foldr fold [] alphaNum
 
diff --git a/src/Data/Name/TH.hs b/src/Data/Name/TH.hs
--- a/src/Data/Name/TH.hs
+++ b/src/Data/Name/TH.hs
@@ -2,7 +2,7 @@
  #-}
 
 module Data.Name.TH (
-    name, nameT
+    name, nameT, nameV
 ) where
 
 
