singletons-0.8.4: Data/Singletons/TypeRepStar.hs
{- Data/Singletons/TypeRepStar.hs
(c) Richard Eisenberg 2013
eir@cis.upenn.edu
This file contains the definitions for considering TypeRep to be the demotion
of *. This is still highly experimental, so expect unusual results!
-}
{-# LANGUAGE RankNTypes, TypeFamilies, KindSignatures, FlexibleInstances,
GADTs, UndecidableInstances, ScopedTypeVariables, DataKinds #-}
module Data.Singletons.TypeRepStar where
import Data.Singletons
import Data.Typeable
data instance Sing (a :: *) where
STypeRep :: Typeable a => Sing a
sTypeRep :: forall (a :: *). Typeable a => Sing a
sTypeRep = STypeRep
instance Typeable a => SingI (a :: *) where
sing = STypeRep
instance SingE (KindParam :: OfKind *) where
type DemoteRep (KindParam :: OfKind *) = TypeRep
fromSing (STypeRep :: Sing a) = typeOf (undefined :: a)
instance SingKind (KindParam :: OfKind *) where
singInstance STypeRep = SingInstance