-- | This module exports the Template Haskell functions necessary 
--   deriving gdiff GADTs and associated instances. Usage is pretty 
--   straightforward.
--
-- @
--module Example where
--import "Data.Generic.Diff"  
--import "Data.Generic.Diff.TH"  
--import "System.Console.Terminfo.Color"
--import "Text.PrettyPrint.Free"
--import "System.Console.Terminfo.PrettyPrint"
--    
--data Exp = Exp :+: Exp
--         | Exp :*: Exp
--         | B Integer
--         deriving(Show, Eq, Typeable)
--
--{- Make the GDiff apparatus -}
--makeGDiff ''Exp
--  
--testA :: Exp
--testA = foldl1 (:+:) . map B $ [0..20]
--
--testB :: Exp
--testB = foldl1 (:+:) . map B $ [0..8] ++ [42] ++ [10..20]
--
--{- Make a type signature to help inference -}
--diffExp :: Type ExpFamily Exp => Exp -> Exp -> EditScript ExpFamily Exp Exp
--diffExp = diff
--
--diffAandB = showCompressed $ diffExp testA testB  
--
--main = diffAandB
--
--{- Utility functions to show colored diffs -}
--showEdits :: forall (f :: * -> * -> *) txs tys.
--                   EditScriptL f txs tys -> IO ()
--showEdits      = display . pprEdits 
--
--showCompressed :: Family f => EditScriptL f txs tys -> IO ()
--showCompressed = display . pprEdits . compress
--
--pprEdits :: EditScriptL f txs tys -> TermDoc
--pprEdits x = case x of 
--    Cpy c d   -> (text $ string c) <+> pprEdits d
--    CpyTree d -> text \" ... \"      <+> pprEdits d
--    Del c d   -> (with (Foreground Red)   . text $ \"- \" ++ string c) <+> pprEdits d
--    Ins c d   -> (with (Foreground Green) . text $ \"+ \" ++ string c) <+> pprEdits d
--    End       -> line
-- @
--
--   Running the main function above would result in the following output
--
-- >>> main
-- :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: :+:  ...  B + 42 - 9  ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ... 
--
--   Except with pretty colors :).
module Data.Generic.Diff.TH(
    -- * Main Creation Function
    makeGDiff, 
    -- * Customizable Creation
    makeGDiffWith, 
    defaultFamSuffix,
    defaultConstructorRenamer, 
    defaultPrimitives, 
    ConstructorRenamer
    ) where

import Data.Generic.Diff.TH.Internal