{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE DeriveDataTypeable #-} -- | -- Module : TypeLevel.Reify -- Copyright : Alexey Khudyakov -- License : BSD3-style (see LICENSE) -- -- Maintainer : Alexey Khudyakov -- Stability : unstable -- Portability : unportable (GHC only) module TypeLevel.Reify ( Witness(..) , Reify(..) ) where import Data.Data (Data,Typeable) -- | Value with type tag data Witness t a = Witness { getValue :: a } deriving (Show,Eq,Typeable,Data) -- | Convert type level into value level using class Reify t a where witness :: Witness t a