diff --git a/BirdPP.cabal b/BirdPP.cabal
new file mode 100644
--- /dev/null
+++ b/BirdPP.cabal
@@ -0,0 +1,20 @@
+
+Name:                BirdPP
+Version:             1.0
+Description:         Literate preprocessor that allows intuitive Haddock comments.
+License:             GPL
+License-file:        LICENSE
+Author:              Sean McLaughlin
+Maintainer:          seanmcl@gmail.com
+Build-Type:          Simple
+Cabal-Version:       >=1.6
+bug-reports:         http://github.com/seanmcl/BirdPP/issues
+category:            Development
+Synopsis:            A preprocessor for Bird-style Literate Haskell comments with Haddock markup.
+Extra-source-files:  LICENSE README 
+Executable BirdPP
+  Main-is:           Main.lhs
+  Build-Depends:     base >= 2 && < 4,
+                     haskell98
+
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,14 @@
+Copyright (C) 2009, Sean McLaughlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/Main.lhs b/Main.lhs
new file mode 100644
--- /dev/null
+++ b/Main.lhs
@@ -0,0 +1,60 @@
+
+| This file is for making Haddock cooperate with Bird-style literate
+comments.  The part for gluing the simple preprocessor into the
+ghc pipeline is from "Syzygies"
+
+http://hackage.haskell.org/trac/ghc/attachment/ticket/2776/dedent.lhs
+
+Usage: ghc -pgmL BirdPP ...
+
+This file contains some gratuitous Haddock markup so you can see it
+in action.  
+
+> module Main 
+>   ( -- * The preprocessor
+>     literize 
+>     -- * The glue
+>   , main )
+> where
+
+> import qualified System
+> import qualified System.IO as IO
+> import qualified System.Environment as Env
+> import qualified Monad
+
+| This comment will show up in the Haddock docs.
+
+Replace literate comment lines by "-- " so Haddock can
+understand that lines beginning with | are haddock comments.
+
+> literize :: String -> String
+> literize ('>' : ' ' : s) = s
+> literize s = "-- " ++ s
+
+| Main runs the preprocessor.  
+
+> main :: IO ()
+> main = do 
+>   args <- System.getArgs
+
+If we are calling BirdPP in the GHC pipeline, it passes a number
+of arguments (see above URL).
+
+>   if length args >= 3 then 
+>     do let [orig, src, out] = drop (length args - 3) args
+>        fi <- IO.openFile src IO.ReadMode
+>        fo <- IO.openFile out IO.WriteMode
+>        IO.hPutStrLn fo $ "{-# LINE 1 \"" ++ orig ++ "\" #-}"
+>        text <- IO.hGetContents fi
+>        mapM_ (IO.hPutStrLn fo . literize) (lines text)
+>        IO.hClose fi
+>        IO.hClose fo
+
+To see the result of the preprocessor (for debugging) you can
+just call BirdPP with a file to process.
+
+>     else case args of 
+>            [f] -> do text <- IO.readFile f
+>                      mapM_ (putStrLn . literize) (lines text)
+>                      return ()
+>            _ -> putStrLn "usage: BirdPP file"
diff --git a/README b/README
new file mode 100644
--- /dev/null
+++ b/README
@@ -0,0 +1,36 @@
+
+Using Haddock markup with Literate Haskell commenting style doesn't 
+currently work.  For instance, to get Haddock markup in an lhs file:
+
+comments
+comments
+
+> code
+
+comments
+
+you'd need to write:
+
+> -- | comments
+> -- comments
+
+> code
+
+> -- | comments
+
+This clearly defeats the purpose of Literate Haskell.  BirdPP is
+a preprocessor that works with GHC so you can write what you want:
+
+
+| comments
+comments
+
+> code
+
+| comments
+
+Compilation of this package will give you an executable called
+bunlit.  This can be used by ghc using the option -pgmL BirdPP.
+E.g.
+
+ghc -pgmL BirdPP --make Main.lhs
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,3 @@
+
+> import Distribution.Simple
+> main = defaultMain
