singletons-2.4: src/Data/Promotion/TH.hs
{-# 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