-- | Extras for haskell-src-exts names.

module Fay.Compiler.QName where

import Language.Haskell.Exts.Syntax

-- | Extract the module name from a qualified name.
qModName :: QName -> Maybe ModuleName
qModName (Qual m _) = Just m
qModName _          = Nothing

-- | Extract the name from a QName.
unQual :: QName -> Name
unQual (Qual _ n) = n
unQual (UnQual n) = n
unQual Special{} = error "unQual Special{}"

-- | Change or add the ModuleName of a QName.
changeModule :: ModuleName -> QName -> QName
changeModule m (Qual _ n) = Qual m n
changeModule m (UnQual n) = Qual m n
changeModule _ Special{}  = error "changeModule Special{}"

-- | Extract the string from a Name.
unname :: Name -> String
unname (Ident s) = s
unname (Symbol s) = s