-- | Some useful functions. module Language.Haskell.DTC.Mod ( modifyHsDecls , unBangType , tyVarName , modifyHsName ) where import Language.Haskell.Exts -- | Lift a function over @[@'HsDecl'@]@ to a function over 'HsModule'. modifyHsDecls :: ([Decl] -> [Decl]) -> (Module -> Module) modifyHsDecls f (Module loc m pr w es is decls) = Module loc m pr w es is $ f decls -- | Skip a bang in a type. unBangType :: BangType -> Type unBangType (BangedTy x) = x unBangType (UnBangedTy x) = x unBangType (UnpackedTy x) = x -- | Extract the 'Name' of a 'TyVarBind'. tyVarName :: TyVarBind -> Name tyVarName (KindedVar n _) = n tyVarName (UnkindedVar n) = n -- | Lift a function over 'String' to a function over 'HsName'. modifyHsName :: (String -> String) -> (Name -> Name) modifyHsName f (Ident x) = Ident $ f x modifyHsName f (Symbol x) = Symbol $ f x