-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | CodeT -- -- CodeT. @package codet @version 0.1 module Language.Haskell.TH.CodeT.Unsafe -- | 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 --newtype CodeT q a -- | Unsafely convert an untyped code representation into a typed code -- representation. -- -- Prefer using unsafeCodeTCoerce. UnsafeCodeT :: q Type -> CodeT q a -- | Unsafely convert an untyped code representation into a typed code -- representation. unsafeCodeTCoerce :: Quote q => q Type -> CodeT q a -- | Extract the untyped representation from the typed representation. unTypeCodeT :: CodeT m a -> m Type -- |
-- >>> let ty = appCodeT (codeT @Maybe) (codeT @Char) -- -- >>> unTypeCodeT ty >>= print . ppr -- GHC.Maybe.Maybe GHC.Types.Char --appCodeT :: Quote m => CodeT m f -> CodeT m x -> CodeT m (f x) -- |
-- >>> let e = sigCode [|| 'x' ||] codeT -- -- >>> unTypeCode e >>= print . ppr -- 'x' :: GHC.Types.Char --sigCode :: Quote q => Code q a -> CodeT q a -> Code q a -- |
-- >>> let ty = sigCodeT (codeT @Bool) codeT -- -- >>> unTypeCodeT ty >>= print . ppr -- (GHC.Types.Bool :: GHC.Prim.TYPE (GHC.Types.BoxedRep GHC.Types.Lifted)) --sigCodeT :: Quote q => CodeT q (a :: k) -> CodeT q k -> CodeT q a type CodeTQ = CodeT Q -- | 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 --unsafeCodeTName :: Quote m => Name -> CodeT m a -- | Unsafely create a data constructor name and convert it into a typed -- code representation. unsafeCodeTNameD :: String -> String -> String -> forall m. Quote m => CodeT m a -- | Unsafely create a type constructor name and convert it into a typed -- code representation. unsafeCodeTNameTC :: String -> String -> String -> forall m. Quote m => CodeT m a -- | 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). class LiftT a codeT :: (LiftT a, Quote m) => CodeT m a instance forall k1 k2 (f :: k1 -> k2) (x :: k1). (Language.Haskell.TH.CodeT.Unsafe.LiftT f, Language.Haskell.TH.CodeT.Unsafe.LiftT x) => Language.Haskell.TH.CodeT.Unsafe.LiftT (f x) instance GHC.TypeLits.KnownSymbol s => Language.Haskell.TH.CodeT.Unsafe.LiftT s instance GHC.TypeNats.KnownNat n => Language.Haskell.TH.CodeT.Unsafe.LiftT n instance GHC.TypeLits.KnownChar c => Language.Haskell.TH.CodeT.Unsafe.LiftT c instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.Int instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.Word instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.Float instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.Double instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Int.Int8 instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Int.Int16 instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Int.Int32 instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Int.Int64 instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Word.Word8 instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Word.Word16 instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Word.Word32 instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Word.Word64 instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.Bool instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.Ordering instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.Char instance Language.Haskell.TH.CodeT.Unsafe.LiftT () instance Language.Haskell.TH.CodeT.Unsafe.LiftT (,) instance Language.Haskell.TH.CodeT.Unsafe.LiftT (,,) instance Language.Haskell.TH.CodeT.Unsafe.LiftT (,,,) instance Language.Haskell.TH.CodeT.Unsafe.LiftT (,,,,) instance Language.Haskell.TH.CodeT.Unsafe.LiftT (,,,,,) instance Language.Haskell.TH.CodeT.Unsafe.LiftT (,,,,,,) instance Language.Haskell.TH.CodeT.Unsafe.LiftT [] instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Maybe.Maybe instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.IO instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Either.Either instance Language.Haskell.TH.CodeT.Unsafe.LiftT (->) instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Prim.TYPE instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.RuntimeRep instance Language.Haskell.TH.CodeT.Unsafe.LiftT 'GHC.Types.BoxedRep instance Language.Haskell.TH.CodeT.Unsafe.LiftT GHC.Types.Levity instance Language.Haskell.TH.CodeT.Unsafe.LiftT 'GHC.Types.Lifted instance Language.Haskell.TH.CodeT.Unsafe.LiftT 'GHC.Types.Unlifted instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.ByteString.Internal.Type.ByteString instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.ByteString.Lazy.Internal.ByteString instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.ByteString.Builder.Internal.Builder instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.IntMap.Internal.IntMap instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.IntSet.Internal.IntSet instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Map.Internal.Map instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Sequence.Internal.Seq instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Set.Internal.Set instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Tree.Tree instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Text.Internal.Text instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Text.Internal.Lazy.Text instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Text.Internal.Builder.Builder instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Functor.Identity.Identity instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Functor.Compose.Compose instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Functor.Const.Const instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Time.Clock.Internal.UTCTime.UTCTime instance Language.Haskell.TH.CodeT.Unsafe.LiftT Data.Time.Calendar.Days.Day module Language.Haskell.TH.CodeT -- | 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 --data CodeT q a -- | Extract the untyped representation from the typed representation. unTypeCodeT :: CodeT m a -> m Type -- |
-- >>> let ty = appCodeT (codeT @Maybe) (codeT @Char) -- -- >>> unTypeCodeT ty >>= print . ppr -- GHC.Maybe.Maybe GHC.Types.Char --appCodeT :: Quote m => CodeT m f -> CodeT m x -> CodeT m (f x) -- |
-- >>> let e = sigCode [|| 'x' ||] codeT -- -- >>> unTypeCode e >>= print . ppr -- 'x' :: GHC.Types.Char --sigCode :: Quote q => Code q a -> CodeT q a -> Code q a -- |
-- >>> let ty = sigCodeT (codeT @Bool) codeT -- -- >>> unTypeCodeT ty >>= print . ppr -- (GHC.Types.Bool :: GHC.Prim.TYPE (GHC.Types.BoxedRep GHC.Types.Lifted)) --sigCodeT :: Quote q => CodeT q (a :: k) -> CodeT q k -> CodeT q a type CodeTQ = CodeT Q -- | 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). class LiftT a codeT :: (LiftT a, Quote m) => CodeT m a