module Importify.Syntax.Module
( getModuleTitle
, isInsideExport
, modulePragmas
) where
import Universum
import Language.Haskell.Exts (ExportSpec (EModuleContents),
ExportSpecList (..), Module (..),
ModuleHead (..), ModuleName,
ModuleName (..), ModulePragma)
import Language.Haskell.Names.SyntaxUtils (dropAnn, getModuleName)
getModuleNameId :: ModuleName l -> String
getModuleNameId (ModuleName _ id) = id
getModuleTitle :: Module l -> String
getModuleTitle = getModuleNameId . getModuleName
isInsideExport :: Maybe (ModuleHead l) -> ModuleName () -> Bool
isInsideExport moduleHead moduleName = moduleName `elem` exportedModules moduleHead
exportedModules :: Maybe (ModuleHead l) -> [ModuleName ()]
exportedModules moduleHead = qualifiedModuleNames
where
exports = do
ModuleHead _ _ _ maybeExports <- moduleHead
maybeExports
qualifiedModuleNames :: [ModuleName ()]
qualifiedModuleNames = do
ExportSpecList _ specs <- maybe [] one exports
EModuleContents _ eModule <- specs
pure $ dropAnn eModule
modulePragmas :: Module l -> [ModulePragma l]
modulePragmas (Module _ _ pragmas _ _) = pragmas
modulePragmas (XmlPage _ _ pragmas _ _ _ _) = pragmas
modulePragmas (XmlHybrid _ _ pragmas _ _ _ _ _ _) = pragmas