    {-# LANGUAGE Safe #-}
    {-# LANGUAGE PatternSynonyms #-}
    {-# LANGUAGE MagicHash #-}

    -- |
    --
    -- Module      :  Type.Reflection
    -- Copyright   :  (c) The University of Glasgow, CWI 2001--2017
    -- License     :  BSD-style (see the file libraries/base/LICENSE)
    --
    -- Maintainer  :  libraries@haskell.org
    -- Stability   :  stable
    -- Portability :  non-portable (requires GADTs and compiler support)
    --
    -- This provides a type-indexed type representation mechanism, similar to that
    -- described by,
    --
    -- * Simon Peyton-Jones, Stephanie Weirich, Richard Eisenberg,
    -- Dimitrios Vytiniotis. "<https://www.microsoft.com/en-us/research/wp-content/uploads/2016/08/dynamic.pdf A reflection on types>".
    -- /Proc. Philip Wadler's 60th birthday Festschrift/, Edinburgh (April 2016).
    --
    -- The interface provides 'I.TypeRep', a type representation which can
    -- be safely decomposed and composed. See "Data.Dynamic" for an example of this.
    --
    -- @since 4.10.0.0
    --

    module Type.Reflection
        (-- *  The Typeable class
         Typeable,
         typeRep,
         withTypeable,
         -- *  Propositional equality
         (:~:)(Refl),
         (:~~:)(HRefl),
         -- *  Type representations
         -- **  Type-Indexed
         TypeRep,
         pattern TypeRep,
         typeOf,
         pattern App,
         pattern Con,
         pattern Con',
         pattern Fun,
         typeRepTyCon,
         rnfTypeRep,
         eqTypeRep,
         decTypeRep,
         typeRepKind,
         splitApps,
         -- **  Quantified
         SomeTypeRep(..),
         someTypeRep,
         someTypeRepTyCon,
         rnfSomeTypeRep,
         -- *  Type constructors
         TyCon,
         tyConPackage,
         tyConModule,
         tyConName,
         rnfTyCon,
         -- *  Module names
         Module,
         moduleName,
         modulePackage,
         rnfModule
         ) where

    import GHC.Internal.Type.Reflection