codet-0.1: CodeT
Safe HaskellUnsafe
LanguageHaskell2010

Language.Haskell.TH.CodeT.Unsafe

Contents

Synopsis

CodeT

newtype CodeT q a Source #

CodeT is to Type what Code is to Exp.

Because current GHC Haskell doesn't have true dependent types, we often use singletons pattern to emulate them. To a first approximation CodeT q a -> ... type emulates dependent function forall (a :: Code q Type) -> ....

There aren't typed type quotes, i.e. we cannot write [t|| Int ||], instead we have to resort to unsafe interface for now:

>>> let ty = UnsafeCodeT [t| Int |] :: Quote q => CodeT q Int
>>> unTypeCodeT ty >>= print . ppr
GHC.Types.Int

... or we can "safely" create many CodeT values using LiftT type-class:

>>> let ty' = codeT :: Quote q => CodeT q Int
>>> unTypeCodeT ty' >>= print . ppr
GHC.Types.Int

Constructors

UnsafeCodeT (q Type)

Unsafely convert an untyped code representation into a typed code representation.

Prefer using unsafeCodeTCoerce.

unsafeCodeTCoerce :: Quote q => q Type -> CodeT q a Source #

Unsafely convert an untyped code representation into a typed code representation.

unTypeCodeT :: CodeT m a -> m Type Source #

Extract the untyped representation from the typed representation.

appCodeT :: Quote m => CodeT m f -> CodeT m x -> CodeT m (f x) Source #

>>> let ty = appCodeT (codeT @Maybe) (codeT @Char)
>>> unTypeCodeT ty >>= print . ppr
GHC.Maybe.Maybe GHC.Types.Char

sigCode :: Quote q => Code q a -> CodeT q a -> Code q a Source #

>>> let e = sigCode [|| 'x' ||] codeT
>>> unTypeCode e >>= print . ppr
'x' :: GHC.Types.Char

sigCodeT :: Quote q => CodeT q (a :: k) -> CodeT q k -> CodeT q a Source #

>>> let ty = sigCodeT (codeT @Bool) codeT
>>> unTypeCodeT ty >>= print . ppr
(GHC.Types.Bool :: GHC.Prim.TYPE (GHC.Types.BoxedRep GHC.Types.Lifted))

unsafeCodeTName :: Quote m => Name -> CodeT m a Source #

Unsafely convert a (type) name into a typed code representation.

The namespace of Name is not checked.

>>> let ty = unsafeCodeTName ''Bool
>>> unTypeCodeT ty >>= print . ppr
GHC.Types.Bool

unsafeCodeTNameD :: String -> String -> String -> forall m. Quote m => CodeT m a Source #

Unsafely create a data constructor name and convert it into a typed code representation.

unsafeCodeTNameTC :: String -> String -> String -> forall m. Quote m => CodeT m a Source #

Unsafely create a type constructor name and convert it into a typed code representation.

LiftT

class LiftT a where Source #

Implicitly create CodeT values.

This packages provides some LiftT instances for types in GHC bundled libs.

There is no instance for Constraint, as Constraint is not apart from Type. See the GHC issue https://gitlab.haskell.org/ghc/ghc/-/issues/24279.

The codet-plugin can automatically create instances for type constructors. (The provided f x instance does most of the work).

Methods

codeT :: Quote m => CodeT m a Source #

Instances

Instances details
KnownNat n => LiftT (n :: Nat) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m n Source #

KnownChar c => LiftT (c :: Char) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m c Source #

LiftT 'Lifted Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m 'Lifted Source #

LiftT 'Unlifted Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m 'Unlifted Source #

KnownSymbol s => LiftT (s :: Symbol) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m s Source #

LiftT Int16 Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Int16 Source #

LiftT Int32 Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Int32 Source #

LiftT Int64 Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Int64 Source #

LiftT Int8 Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Int8 Source #

LiftT Word16 Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Word16 Source #

LiftT Word32 Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Word32 Source #

LiftT Word64 Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Word64 Source #

LiftT Word8 Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Word8 Source #

LiftT Builder Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Builder Source #

LiftT ByteString Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m ByteString Source #

LiftT ByteString Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m ByteString Source #

LiftT IntSet Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m IntSet Source #

LiftT Ordering Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Ordering Source #

LiftT Text Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Text Source #

LiftT Builder Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Builder Source #

LiftT Text Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Text Source #

LiftT Day Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Day Source #

LiftT UTCTime Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m UTCTime Source #

LiftT () Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m () Source #

LiftT Bool Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Bool Source #

LiftT Char Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Char Source #

LiftT Double Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Double Source #

LiftT Float Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Float Source #

LiftT Int Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Int Source #

LiftT Levity Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Levity Source #

LiftT RuntimeRep Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m RuntimeRep Source #

LiftT Word Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Word Source #

(LiftT f, LiftT x) => LiftT (f x :: k2) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m (f x) Source #

LiftT 'BoxedRep Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m 'BoxedRep Source #

LiftT TYPE Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m TYPE Source #

LiftT (,,,,,,) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m (,,,,,,) Source #

LiftT (,,,,,) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m (,,,,,) Source #

LiftT (,,,,) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m (,,,,) Source #

LiftT (,,,) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m (,,,) Source #

LiftT (,,) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m (,,) Source #

LiftT Either Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Either Source #

LiftT Map Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Map Source #

LiftT (,) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m (,) Source #

LiftT Identity Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Identity Source #

LiftT IntMap Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m IntMap Source #

LiftT Seq Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Seq Source #

LiftT Set Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Set Source #

LiftT Tree Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Tree Source #

LiftT IO Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m IO Source #

LiftT Maybe Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Maybe Source #

LiftT List Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m List Source #

LiftT (Const :: Type -> k -> Type) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Const Source #

LiftT (Compose :: (k -> Type) -> (k1 -> k) -> k1 -> Type) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m Compose Source #

LiftT (->) Source # 
Instance details

Defined in Language.Haskell.TH.CodeT.Unsafe

Methods

codeT :: forall (m :: Type -> Type). Quote m => CodeT m (->) Source #