{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE UndecidableInstances #-} -- | Representations for signed and unsigned integer types -- -- The reason for using symbol names ending with @_t@ is that 'deriveRender' -- uses everything that comes before @_@ when rendering the constructor. module Data.TypeRep.Types.IntWord where import Data.Int import qualified Data.Typeable as Typeable import Data.Word import Language.Syntactic import Data.TypeRep.TH data IntWordType a where Int8_t :: IntWordType (Full Int8) Int16_t :: IntWordType (Full Int16) Int32_t :: IntWordType (Full Int32) Int64_t :: IntWordType (Full Int64) Word8_t :: IntWordType (Full Word8) Word16_t :: IntWordType (Full Word16) Word32_t :: IntWordType (Full Word32) Word64_t :: IntWordType (Full Word64) int8Type :: (Syntactic a, IntWordType :<: Domain a, Internal a ~ Int8) => a int8Type = sugarSym Int8_t int16Type :: (Syntactic a, IntWordType :<: Domain a, Internal a ~ Int16) => a int16Type = sugarSym Int16_t int32Type :: (Syntactic a, IntWordType :<: Domain a, Internal a ~ Int32) => a int32Type = sugarSym Int32_t int64Type :: (Syntactic a, IntWordType :<: Domain a, Internal a ~ Int64) => a int64Type = sugarSym Int64_t word8Type :: (Syntactic a, IntWordType :<: Domain a, Internal a ~ Word8) => a word8Type = sugarSym Word8_t word16Type :: (Syntactic a, IntWordType :<: Domain a, Internal a ~ Word16) => a word16Type = sugarSym Word16_t word32Type :: (Syntactic a, IntWordType :<: Domain a, Internal a ~ Word32) => a word32Type = sugarSym Word32_t word64Type :: (Syntactic a, IntWordType :<: Domain a, Internal a ~ Word64) => a word64Type = sugarSym Word64_t deriveRender_forType ''IntWordType deriveTypeEq ''IntWordType deriveWitnessAny ''IntWordType derivePWitnessAny ''IntWordType deriveWitness ''Typeable.Typeable ''IntWordType deriveWitness ''Eq ''IntWordType deriveWitness ''Ord ''IntWordType deriveWitness ''Show ''IntWordType deriveWitness ''Num ''IntWordType deriveWitness ''Integral ''IntWordType derivePWitness ''Typeable.Typeable ''IntWordType derivePWitness ''Eq ''IntWordType derivePWitness ''Ord ''IntWordType derivePWitness ''Show ''IntWordType derivePWitness ''Num ''IntWordType derivePWitness ''Integral ''IntWordType