module QualNames where
import HsName
import HsIdent
import Maybe(isJust)
class QualNames qn m n | qn -> m n, m n -> qn where
getQualifier :: qn -> Maybe m
getQualified :: qn -> n
mkUnqual :: n -> qn
mkQual :: m -> n -> qn
isQual m = isJust (getQualifier m)
isUnqual m = not (isQual m)
qual m = mkQual m . getQualified
unqual m = mkUnqual (getQualified m)
instance QualNames HsName ModuleName Id where
getQualifier (Qual x _) = Just x
getQualifier _ = Nothing
getQualified (Qual _ x) = x
getQualified (UnQual x) = x
mkUnqual = UnQual
mkQual = Qual
instance QualNames t m n => QualNames (HsIdentI t) m (HsIdentI n) where
getQualifier = getQualifier . getHSName
getQualified = mapHsIdent getQualified
mkUnqual = mapHsIdent mkUnqual
mkQual m = mapHsIdent (mkQual m)