- rdr_names
- | '.' `elem` str
- = [ mkQual ns (fmod,fvar) | ns <- namespaces var ]
- | otherwise
- = [ mkUnqual ns fstr | ns <- namespaces str ]
- where (mod,var) = split_longest_prefix str '.'
- fmod = mkFastString mod
- fvar = mkFastString var
- fstr = mkFastString str
- namespaces s
- | isUpper c || c == ':' = [ tcClsName, dataName ]
- | otherwise = [ varName ]
- where c = head s
+ maybe_rdr_name <- myParseIdentifier dflags str
+ case maybe_rdr_name of {
+ Nothing -> return (pcs0, []);
+ Just rdr_name -> do
+
+ -- if the identifier is a constructor (begins with an
+ -- upper-case letter), then we need to consider both
+ -- constructor and type class identifiers.
+ let rdr_names
+ | occNameSpace occ == dataName = [ rdr_name, tccls_name ]
+ | otherwise = [ rdr_name ]
+ where
+ occ = rdrNameOcc rdr_name
+ tccls_occ = setOccNameSpace occ tcClsName
+ tccls_name = setRdrNameOcc rdr_name tccls_occ