diff --git a/src/Data/TypeHash.hs b/src/Data/TypeHash.hs
--- a/src/Data/TypeHash.hs
+++ b/src/Data/TypeHash.hs
@@ -44,7 +44,7 @@
 
 data Type
     = Name { typeName :: String }            -- Abstract type, or recursive reference
-    | Data { typeName :: String, constrs :: [Constructor] }
+    | Data { typeName :: String, dconstrs :: [Constructor] }
     deriving (Eq, Ord, Show, Typeable, Data)
 type Constructor = (String, [Field])
 type Field = (String, Type)  -- a unique number is used for missing field names
@@ -54,7 +54,7 @@
     let tn = show $ fullTypeOf x
     in  case dataTypeRep $ dataTypeOf x of
         AlgRep cs | tn `notElem` tns ->
-             Data { typeName = tn, constrs = map (gConstr (tn:tns) x) cs }
+             Data { typeName = tn, dconstrs = map (gConstr (tn:tns) x) cs }
         _ -> Name { typeName = tn } -- Use type name for truly abstract types and recursive types.
 
 gConstr :: (Data a) => [String] -> a -> Constr -> (String, [Field])
diff --git a/typehash.cabal b/typehash.cabal
--- a/typehash.cabal
+++ b/typehash.cabal
@@ -1,5 +1,6 @@
 Name:		typehash
-Version:	1.4.0.0
+Cabal-Version:  >= 1.2
+Version:	1.4.0.1
 License:	BSD3
 Author:		Lennart Augustsson
 Maintainer:	Lennart Augustsson
@@ -10,6 +11,18 @@
 Description:	Produce a hash for a type that is unique for that type.
 		The hash takes both actual type names and type structure into account.
 		This is useful for checking the type of persisted values.
-Hs-Source-Dirs: src
-Build-Depends:	base < 4, mtl, bytestring, pureMD5, binary
-Exposed-modules:	Data.TypeHash
+
+Flag base4
+    Description: Use base-4.*
+    Default:    True
+
+Library
+  Hs-Source-Dirs: src
+  Build-Depends: mtl, bytestring, pureMD5, binary
+  If flag(base4)
+    Build-Depends:
+      base >= 4 && < 4.4,
+      syb < 0.3
+  else
+    Build-Depends: base < 4
+  Exposed-modules:	Data.TypeHash
