module Fay.Compiler.QName where
import Language.Haskell.Exts
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
withIdent :: (String -> String) -> QName a -> QName a
withIdent f q = case q of
Qual l m n -> Qual l m $ withIdent' f n
UnQual l n -> UnQual l $ withIdent' f n
Special{} -> q
where
withIdent' :: (String -> String) -> Name a -> Name a
withIdent' f' n' = case n' of
Symbol{} -> n'
Ident l s -> Ident l (f' s)
unname :: Name a -> String
unname (Ident _ s) = s
unname (Symbol _ s) = s