subhask-0.1.0.0: src/SubHask/TemplateHaskell/Common.hs
module SubHask.TemplateHaskell.Common
where
import Prelude
import Data.List (init,last,nub,intersperse)
import Language.Haskell.TH.Syntax
import Control.Monad
bndr2type :: TyVarBndr -> Type
bndr2type (PlainTV n) = VarT n
bndr2type (KindedTV n _) = VarT n
isStar :: TyVarBndr -> Bool
isStar (PlainTV _) = True
isStar (KindedTV _ StarT) = True
isStar _ = False
apply2varlist :: Type -> [TyVarBndr] -> Type
apply2varlist contype xs = go $ reverse xs
where
go (x:[]) = AppT contype (mkVar x)
go (x:xs) = AppT (go xs) (mkVar x)
mkVar (PlainTV n) = VarT n
mkVar (KindedTV n _) = VarT n