-- | Collection of dynamic type meta data and casting utilities.
--
-- The template haskell funtions in this module expect to find symbols exported from this module under 'Data.Type'. Thus change:
-- 
-- > import qualified Data.Type as T
-- 
-- Into:
-- 
-- > import qualified Data.Type
-- > import qualified Data.Type as T
--
-- It would be possible to drop this requirement, but currently not without bloating the library unnecessarily.
-- 
-- > import Data.Type
-- >
-- > newtype T m a = T (m a)
-- > deriveMeta ''T
-- >
-- > hello = cast . T $ print "Hello world" :: Meta a => Maybe a
-- > main = case hello of
-- >   Just (T m) -> m
-- >   _          -> print "Impossible!"
--
-- Will print @"Hello world"@.
module Data.Type
	( module Data.Type.Internal.Framework
	, module Data.Type.Internal.Helpers
	, module Data.Type.Internal.Derive
	, module Data.Type.Internal.Body
	) where

import Data.Type.Internal.Framework
import Data.Type.Internal.Body
import Data.Type.Internal.Derive
import Data.Type.Internal.Helpers
import Data.Type.Internal.Instances