{-# LANGUAGE ExplicitNamespaces #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Singletons.Base.TH -- Copyright : (C) 2013 Richard Eisenberg -- License : BSD-style (see LICENSE) -- Maintainer : Ryan Scott -- Stability : experimental -- Portability : non-portable -- -- This module contains everything you need to derive your own singletons via -- Template Haskell, exporting both Template Haskell functionality and -- definitions that are likely to be mentioned in promoted or singled code. -- For a version of this module that only contains the Template Haskell -- functionality and nothing else, see "Data.Singletons.TH" from the -- @singletons-th@ library. -- ---------------------------------------------------------------------------- module Data.Singletons.Base.TH ( -- * Primary Template Haskell generation functions singletons, singletonsOnly, genSingletons, promote, promoteOnly, genDefunSymbols, genPromotions, -- ** Functions to generate equality instances promoteEqInstances, promoteEqInstance, singEqInstances, singEqInstance, singDecideInstances, singDecideInstance, -- ** Functions to generate 'Ord' instances promoteOrdInstances, promoteOrdInstance, singOrdInstances, singOrdInstance, -- ** Functions to generate 'Bounded' instances promoteBoundedInstances, promoteBoundedInstance, singBoundedInstances, singBoundedInstance, -- ** Functions to generate 'Enum' instances promoteEnumInstances, promoteEnumInstance, singEnumInstances, singEnumInstance, -- ** Functions to generate 'Show' instances promoteShowInstances, promoteShowInstance, singShowInstances, singShowInstance, showSingInstances, showSingInstance, -- ** Utility functions singITyConInstances, singITyConInstance, cases, sCases, -- * Basic singleton definitions SList(..), SBool(..), STuple0(..), STuple2(..), STuple3(..), STuple4(..), STuple5(..), STuple6(..), STuple7(..), SOrdering(..), module Data.Singletons, -- * Auxiliary definitions -- | These definitions might be mentioned in code generated by Template Haskell, -- so they must be in scope. PEq(..), If, sIf, type (&&), (%&&), SEq(..), POrd(..), SOrd(..), SDecide(..), (:~:)(..), Void, Refuted, Decision(..), PBounded(..), SBounded(..), PEnum(FromEnum, ToEnum), SEnum(sFromEnum, sToEnum), PShow(..), SShow(..), PIsString(..), SIsString(..), ShowString, sShowString, ShowParen, sShowParen, ShowSpace, sShowSpace, ShowChar, sShowChar, ShowCommaSpace, sShowCommaSpace, FromInteger, sFromInteger, Negate, sNegate, PFunctor(..), SFunctor(..), PFoldable(..), SFoldable(..), PSemigroup(..), SSemigroup(..), PMonoid(..), SMonoid(..), PTraversable(..), STraversable(..), PApplicative(..), SApplicative(..), type (.), (%.), Error, sError, ErrorSym0, ErrorSym1, Undefined, sUndefined, UndefinedSym0, TrueSym0, FalseSym0, type (==@#@$), type (==@#@$$), type (==@#@$$$), type (>@#@$), type (>@#@$$), type (>@#@$$$), IfSym0, IfSym1, IfSym2, IfSym3, 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, FoldlSym0, FoldlSym1, FoldlSym2, FoldlSym3, MinBoundSym0, MaxBoundSym0, ShowsPrecSym0, ShowsPrecSym1, ShowsPrecSym2, ShowsPrecSym3, ShowStringSym0, ShowStringSym1, ShowStringSym2, ShowParenSym0, ShowParenSym1, ShowParenSym2, ShowSpaceSym0, ShowSpaceSym1, ShowCharSym0, ShowCharSym1, ShowCharSym2, ShowCommaSpaceSym0, ShowCommaSpaceSym1, FromIntegerSym0, FromIntegerSym1, NegateSym0, NegateSym1, FromStringSym0, FromStringSym1, FmapSym0, FmapSym1, FmapSym2, type (<$@#@$), type (<$@#@$$), type (<$@#@$$$), FoldMapSym0, FoldMapSym1, FoldMapSym2, type (<>@#@$), type (<>@#@$$), type (<>@#@$$$), MemptySym0, MappendSym0, MappendSym1, MappendSym2, FoldrSym0, FoldrSym1, FoldrSym2, FoldrSym3, TraverseSym0, TraverseSym1, TraverseSym2, PureSym0, PureSym1, type (<*>@#@$), type (<*>@#@$$), type (<*>@#@$$$), LiftA2Sym0, LiftA2Sym1, LiftA2Sym2, LiftA2Sym3, type (.@#@$), type (.@#@$$), type (.@#@$$$), type (.@#@$$$$), NilSym0, (:@#@$), (:@#@$$), (:@#@$$$), SuppressUnusedWarnings(..) ) where import Control.Applicative.Singletons import Data.Bool.Singletons import Data.Eq.Singletons import Data.Foldable.Singletons import Data.Functor.Singletons hiding (Void) import Data.Monoid.Singletons import Data.Ord.Singletons import Data.Semigroup.Singletons ( PSemigroup(..), SSemigroup(..) , type (<>@#@$), type (<>@#@$$), type (<>@#@$$$) ) import Data.Singletons import Data.Singletons.Base.Enum import Data.Singletons.Base.Instances hiding (Foldl, FoldlSym0, FoldlSym1, FoldlSym2, FoldlSym3, sFoldl) import Data.Singletons.Decide import Data.Singletons.TH import Data.String.Singletons import Data.Traversable.Singletons import GHC.Base.Singletons hiding (Foldr, FoldrSym0, FoldrSym1, FoldrSym2, FoldrSym3, sFoldr) import GHC.Num.Singletons import GHC.TypeLits.Singletons import Text.Show.Singletons