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