--- magic-haskell-1.0.8.orig/utils/genconsts.hs
+++ magic-haskell-1.0.8/utils/genconsts.hs
@@ -0,0 +1,66 @@
+{- -*- Mode: haskell; -*-
+Haskell Magic Interface
+Copyright (C) 2005 John Goerzen <jgoerzen@complete.org>
+
+This code is under a 3-clause BSD license; see COPYING for details.
+-}
+
+import Data.Char
+import Data.List
+
+const2HS (x:xs) =
+    x : c2hs xs
+    where c2hs [] = []
+          c2hs ('_':x:xs) = x : c2hs xs
+          c2hs (x:xs) = toLower x : c2hs xs
+
+getC const = "#{const " ++ const ++ "}"
+
+errorClause name consts =
+    "data " ++ name ++ " =\n   " ++
+    concat (intersperse "\n | " (map toDecl consts)) ++
+    "\n | Unknown" ++ name ++ " Int\n" ++
+    "\n deriving (Show)" ++
+    "\n\ninstance Enum " ++ name ++ " where\n" ++
+    concat (intersperse "\n" (map toenums consts)) ++
+    "\n toEnum x = Unknown" ++ name ++ " x\n" ++
+    "\n" ++ concat (intersperse "\n" (map fromenums consts)) ++
+    "\n fromEnum (Unknown" ++ name ++ " x) = x\n" ++
+    "\ninstance Ord " ++ name ++ " where\n" ++
+    " compare x y = compare (fromEnum x) (fromEnum y)\n\n" ++
+    "instance Eq " ++ name ++ " where\n" ++
+    " x == y = (fromEnum x) == (fromEnum y)\n\n"
+    where
+    toDecl = const2HS
+    toenums i = 
+        " toEnum (" ++ getC i ++ ") = " ++ (const2HS i)
+    fromenums i = 
+        " fromEnum " ++ (const2HS i) ++ " = (" ++ getC i ++ ")"
+
+modHeader = 
+ "-- AUTO-GENERATED FILE, DO NOT EDIT.  GENERATED BY utils/genconsts.hs\n" ++
+ "{- |\n" ++
+ "   Module     : Magic.Data\n" ++
+ "   Copyright  : Copyright (C) 2005 John Goerzen\n" ++
+ "   License    : BSD\n" ++
+ "\n" ++
+ "   Maintainer : John Goerzen,\n" ++
+ "   Maintainer : jgoerzen@complete.org\n" ++
+ "   Stability  : provisional\n" ++
+ "   Portability: portable\n" ++
+ "\n" ++
+ "Haskell types for libmagic constants\n" ++
+ "\n" ++
+ "Written by John Goerzen, jgoerzen\\@complete.org\n" ++
+ "-}\n\n" ++
+ "module Magic.Data (module Magic.Data) where\n" ++
+ "\n#include \"magic.h\"\n\n"
+
+main = 
+    do putStrLn modHeader
+       putStrLn (errorClause "MagicFlag" magicFlags)
+
+magicFlags = ["MAGIC_NONE", "MAGIC_DEBUG", "MAGIC_SYMLINK",
+              "MAGIC_COMPRESS", "MAGIC_DEVICES", "MAGIC_MIME",
+              "MAGIC_CONTINUE", "MAGIC_CHECK",
+              "MAGIC_PRESERVE_ATIME", "MAGIC_RAW", "MAGIC_ERROR"]
