{-# LANGUAGE ExplicitNamespaces #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Promotion.TH -- Copyright : (C) 2013 Richard Eisenberg -- License : BSD-style (see LICENSE) -- Maintainer : Richard Eisenberg (rae@cs.brynmawr.edu) -- Stability : experimental -- Portability : non-portable -- -- This module contains everything you need to promote your own functions via -- Template Haskell. -- ---------------------------------------------------------------------------- module Data.Promotion.TH ( -- * Primary Template Haskell generation functions promote, promoteOnly, genDefunSymbols, genPromotions, -- ** Functions to generate @Eq@ instances promoteEqInstances, promoteEqInstance, -- ** Functions to generate @Ord@ instances promoteOrdInstances, promoteOrdInstance, -- ** Functions to generate @Bounded@ instances promoteBoundedInstances, promoteBoundedInstance, -- ** Functions to generate @Enum@ instances promoteEnumInstances, promoteEnumInstance, -- ** Functions to generate @Show@ instances promoteShowInstances, promoteShowInstance, -- ** defunctionalization TyFun, Apply, type (@@), -- * Auxiliary definitions -- | These definitions might be mentioned in code generated by Template Haskell, -- so they must be in scope. PEq(..), If, type (&&), POrd(..), ThenCmp, Foldl, PBounded(..), PEnum(FromEnum, ToEnum), PShow(..), ShowString, ShowParen, ShowSpace, ShowChar, ShowCommaSpace, (:.), Proxy(..), Error, ErrorSym0, ErrorSym1, Undefined, UndefinedSym0, TrueSym0, FalseSym0, type (==@#@$), type (==@#@$$), type (==@#@$$$), type (>@#@$), type (>@#@$$), type (>@#@$$$), LTSym0, EQSym0, GTSym0, Tuple0Sym0, Tuple2Sym0, Tuple2Sym1, Tuple2Sym2, Tuple3Sym0, Tuple3Sym1, Tuple3Sym2, Tuple3Sym3, Tuple4Sym0, Tuple4Sym1, Tuple4Sym2, Tuple4Sym3, Tuple4Sym4, Tuple5Sym0, Tuple5Sym1, Tuple5Sym2, Tuple5Sym3, Tuple5Sym4, Tuple5Sym5, Tuple6Sym0, Tuple6Sym1, Tuple6Sym2, Tuple6Sym3, Tuple6Sym4, Tuple6Sym5, Tuple6Sym6, Tuple7Sym0, Tuple7Sym1, Tuple7Sym2, Tuple7Sym3, Tuple7Sym4, Tuple7Sym5, Tuple7Sym6, Tuple7Sym7, CompareSym0, CompareSym1, CompareSym2, ThenCmpSym0, ThenCmpSym1, ThenCmpSym2, FoldlSym0, FoldlSym1, FoldlSym2, FoldlSym3, MinBoundSym0, MaxBoundSym0, ShowsPrecSym0, ShowsPrecSym1, ShowsPrecSym2, ShowsPrecSym3, ShowStringSym0, ShowStringSym1, ShowStringSym2, ShowParenSym0, ShowParenSym1, ShowParenSym2, ShowSpaceSym0, ShowSpaceSym1, ShowCharSym0, ShowCharSym1, ShowCharSym2, ShowCommaSpaceSym0, ShowCommaSpaceSym1, type (.@#@$), type (.@#@$$), type (.@#@$$$), type (.@#@$$$$), (:@#@$), (:@#@$$), (:@#@$$$), SuppressUnusedWarnings(..) ) where import Data.Singletons.Internal import Data.Singletons.Promote import Data.Singletons.Prelude.Base import Data.Singletons.Prelude.Instances import Data.Singletons.Prelude.Bool import Data.Singletons.Prelude.Enum import Data.Singletons.Prelude.Eq import Data.Singletons.Prelude.Ord import Data.Singletons.Prelude.Show import Data.Singletons.TypeLits import Data.Singletons.SuppressUnusedWarnings