{-# LANGUAGE FlexibleInstances #-} module Text.Chatty.Templates where import Language.Haskell.TH -- | Returns a TypeQ from a name strToType :: Name -> Q Type strToType s = do TyConI d <- reify s case d of DataD _ n _ _ _ -> conT $ simpleName n NewtypeD _ n _ _ _ -> conT $ simpleName n TySynD n _ _ -> conT $ simpleName n where simpleName :: Name -> Name simpleName nm = let s = nameBase nm in case dropWhile (/=':') s of [] -> mkName s _:[] -> mkName s _:t -> mkName t