-- | Some useful functions. module Language.Haskell.DTC.Mod ( modifyHsDecls , unBangType , modifyHsName ) where import Language.Haskell.Syntax -- | Lift a function over @[@'HsDecl'@]@ to a function over 'HsModule'. modifyHsDecls :: ([HsDecl] -> [HsDecl]) -> (HsModule -> HsModule) modifyHsDecls f (HsModule loc m es is decls) = HsModule loc m es is $ f decls -- | Skip a bang in a type. unBangType :: HsBangType -> HsType unBangType (HsBangedTy x) = x unBangType (HsUnBangedTy x) = x -- | Lift a function over 'String' to a function over 'HsName'. modifyHsName :: (String -> String) -> (HsName -> HsName) modifyHsName f (HsIdent x) = HsIdent $ f x modifyHsName f (HsSymbol x) = HsSymbol $ f x