module Fay.Compiler.QName where
import Language.Haskell.Exts.Annotated
qModName :: QName a -> Maybe (ModuleName a)
qModName (Qual _ m _) = Just m
qModName _ = Nothing
unQual :: QName a -> Name a
unQual (Qual _ _ n) = n
unQual (UnQual _ n) = n
unQual Special{} = error "unQual Special{}"
unQualify :: QName a -> QName a
unQualify (Qual a _ n) = UnQual a n
unQualify u@UnQual{} = u
unQualify Special{} = error "unQualify: Special{}"
changeModule :: ModuleName a -> QName a -> QName a
changeModule m (Qual a _ n) = Qual a m n
changeModule m (UnQual a n) = Qual a m n
changeModule _ Special{} = error "changeModule Special{}"
changeModule' :: (String -> String) -> QName a -> QName a
changeModule' f (Qual l (ModuleName ml mn) n) = Qual l (ModuleName ml $ f mn) n
changeModule' _ x = x
unname :: Name a -> String
unname (Ident _ s) = s
unname (Symbol _ s) = s