diff --git a/bin/testParser.hs b/bin/testParser.hs
new file mode 100644
--- /dev/null
+++ b/bin/testParser.hs
@@ -0,0 +1,8 @@
+module Main where
+
+import Language.Lojban.Parser
+import System.Environment
+
+main = do
+	[str] <- getArgs
+	print $ parse str
diff --git a/lojbanParser.cabal b/lojbanParser.cabal
--- a/lojbanParser.cabal
+++ b/lojbanParser.cabal
@@ -1,8 +1,8 @@
 build-type:	Simple
-cabal-version:	>= 1.6
+cabal-version:	>= 1.8
 
 name:		lojbanParser
-version:	0.1.6
+version:	0.1.7
 stability:	experimental
 author:		.iocikun.juj. <PAF01143@nifty.ne.jp>
 maintainer:	.iocikun.juj. <PAF01143@nifty.ne.jp>
@@ -21,10 +21,13 @@
 
 library
     hs-source-dirs:	src
+    extensions:		DeriveDataTypeable
     exposed-modules:	Language.Lojban.Parser
     other-modules: Preprocess LexerPappy Pos Parse TestPappy
+    build-depends:	base > 3 && < 5
 
 executable	testParser
-    hs-source-dirs:	src
+    hs-source-dirs:	bin
+    extensions:		DeriveDataTypeable
     main-is:		testParser.hs
-    build-depends:	base > 3 && < 5
+    build-depends:	base > 3 && < 5, lojbanParser
diff --git a/src/Language/Lojban/Parser.hs b/src/Language/Lojban/Parser.hs
--- a/src/Language/Lojban/Parser.hs
+++ b/src/Language/Lojban/Parser.hs
@@ -22,7 +22,28 @@
 	IntervalProperty(..),
 	Tag(..),
 	SpaceInterval(..),
-	SpaceOffset(..)
+	SpaceOffset(..),
+
+	Indicators(..),
+	Term(..),
+	Gik(..),
+	Gihek(..),
+	Statement(..),
+	Ek(..),
+	Quantifier(..),
+	Paragraph(..),
+	Paragraphs(..),
+	Pre(..),
+	LerfuString(..),
+	RelativeClauses(..),
+	Mex(..),
+	JoikEk(..),
+	NumberLerfuString(..),
+	Guhek(..),
+	JoikJekSelbri5(..),
+	Joik(..),
+	Number(..),
+	Tense(..)
 ) where
 
 import TestPappy
diff --git a/src/TestPappy.hs b/src/TestPappy.hs
--- a/src/TestPappy.hs
+++ b/src/TestPappy.hs
@@ -7,6 +7,7 @@
 
 import System.Environment
 import Data.Maybe
+import Data.Data
 import Preprocess
 
 ml = maybeToList
@@ -59,7 +60,7 @@
 	| HeadNIhO [Clause] [Free] (Maybe Paragraphs)
 	| TopText [Clause] (Either [Clause] (Maybe [([String], String)])) [Free]
 		(Maybe (JoikJek, [Free])) (Maybe Text) (Maybe Pre)
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 data Sumti
 	= TermsPEhETerms Term [(Clause, [Free], JoikJek, [Free], Term)]
@@ -91,12 +92,12 @@
 	| JoikEkKESumti Sumti JoikEk [Free] (Maybe Tag) Clause [Free] Sumti
 		(Maybe Clause) [Free]
 	| VUhO Sumti Clause [Free] RelativeClauses
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 data TermsGikTerms
 	= TGT Term TermsGikTerms Term
 	| Gik Gik
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 data SumtiTail
 	= SumtiSumtiTail Sumti (Maybe RelativeClauses) SumtiTail
@@ -104,7 +105,7 @@
 	| SelbriRelativeClauses Selbri (Maybe RelativeClauses)
 	| STQuantifierSelbri Quantifier Selbri (Maybe RelativeClauses)
 	| QuantifierSumti Quantifier Sumti
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 data Selbri
 	= Brivla Clause [Free]
@@ -129,7 +130,7 @@
 	| NU Clause (Maybe Clause) [Free]
 		[(JoikJek, [Free], Clause, Maybe Clause, [Free])]
 		Sentence (Maybe Clause) [Free]
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 type RelativeClauses = RelativeClause
 
@@ -137,17 +138,17 @@
 	= GOI Clause [Free] Term (Maybe Clause) [Free]
 	| NOI Clause [Free] Sentence (Maybe Clause) [Free]
 	| RelativeClauseZIhE RelativeClause [(Clause, [Free], RelativeClause)]
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 type JoikJekSelbri5 = Either (JoikJek, [Free], Selbri)
 	(Joik, (Maybe Tag), Clause, [Free], Selbri, Maybe Clause, [Free])
 
 data Linkargs
 	= BE Clause [Free] Term (Maybe Links) (Maybe Clause) [Free]
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 data Links
 	= BEI Clause [Free] Term (Maybe Links)
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 type Quantifier = Operand
 type Mex = Operand
@@ -164,7 +165,7 @@
 		[Either (JoikJek, [Free], MexOperator)
 			(Joik, Maybe Tag, Clause, [Free], MexOperator,
 				Maybe Clause, [Free])]
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 data Operand
 	= OLerfuString LerfuString (Maybe Clause) [Free]
@@ -183,14 +184,14 @@
 	| JOhI Clause [Free] [Mex] (Maybe Clause) [Free]
 	| GekOperand Gek Operand Gik Operand
 	| LAhE_NAhEOperand Clause (Maybe Clause) [Free] Operand (Maybe Clause) [Free]
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 data RPExpression
 	= RPExpression Operand (Maybe RPExpressionTail)
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 data RPExpressionTail
 	= RPExpressionTail RPExpression MexOperator (Maybe RPExpressionTail)
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 type NumberLerfuString = [Clause]
 type Number = [Clause]
@@ -208,7 +209,7 @@
 		(Maybe RelativeClauses) (Maybe Clause)
 	| VocativeCmene [Clause] (Maybe RelativeClauses) [Clause] [Free]
 		(Maybe RelativeClauses) (Maybe Clause)
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 type Clause = ([String], String, Indicators)
 type Pre = ([String], String)
@@ -226,12 +227,12 @@
 	| Gihek (Maybe Clause) (Maybe Clause) Clause (Maybe Clause)
 	| BIhI (Maybe Clause) Clause (Maybe Clause)
 	| GAhO Clause JoikJek Clause
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 data Gek
 	= GA (Maybe Clause) Clause (Maybe Clause) [Free]
 	| JoikGI Joik Clause [Free]
 	| STagGik Tag Gik
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 -- type Guhek = ([Clause], [Free])
 -- type Gik = ([Clause], [Free])
 type Guhek = (Maybe Clause, Clause, Maybe Clause, [Free])
@@ -242,7 +243,7 @@
 	= ROI Number Clause (Maybe Clause)
 	| TAhE Clause (Maybe Clause)
 	| ZAhO Clause (Maybe Clause)
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 data Tag
 	= BAI (Maybe Clause) (Maybe Clause) Clause (Maybe Clause) (Maybe Clause)
@@ -261,7 +262,7 @@
 	| FIhO Clause [Free] Selbri (Maybe Clause) [Free]
 	| JoikJekTag Tag [(JoikJek, [Free], Tag)]
 	| JekJoikSTag Tag [(JoikJek, Tag)]
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 data SpaceInterval
 	= FEhE [(Clause, IntervalProperty)]
@@ -269,11 +270,11 @@
 	| VEhAVIhAFAhA (Maybe Clause) (Maybe Clause) Clause (Maybe Clause)
 	| VEhAVIhAFEhE (Maybe Clause) (Maybe Clause) SpaceInterval
 	| VEhAVIhAFAhAFEhE (Maybe Clause) (Maybe Clause) Clause (Maybe Clause) SpaceInterval
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 data SpaceOffset
 	= FAhA Clause (Maybe Clause) (Maybe Clause)
-	deriving (Eq, Show)
+	deriving (Eq, Show, Data, Typeable)
 
 {-
 main = do
@@ -288,7 +289,7 @@
 uncurry3 f (x, y, z) = f x y z
 
 isSimpleText ::
-	[Clause] -> (Either [Clause] (Maybe [([String], String)]), [Free]) -> 
+	[Clause] -> (Either [Clause] (Maybe [([String], String)]), [Free]) ->
 	Maybe (JoikJek, [Free]) -> Maybe Text -> Maybe Pre -> Bool
 isSimpleText n tp2 jj t f =
 	null n && isNothing (fromRight $ fst tp2) && null (snd tp2) &&
diff --git a/src/testParser.hs b/src/testParser.hs
deleted file mode 100644
--- a/src/testParser.hs
+++ /dev/null
@@ -1,8 +0,0 @@
-module Main where
-
-import Language.Lojban.Parser
-import System.Environment
-
-main = do
-	[str] <- getArgs
-	print $ parse str
