-- | Makes a `QName` from a string, this string can contain a fully
-- qualified name and symbols which all will be parsed correctly.
-- SpecialCon is not handled correctly
qual' :: String -> QName
qual' ('(':nr) = case reverse nr of
    [] -> error "qual' only a '('"
    (')':n) -> case symModSplit (reverse n) of
        ([], s) -> UnQual . Symbol $ s
        ( m, s) -> Qual (ModuleName m) (Symbol s)
    _ -> error "qual' unmatched '('"
qual' :: String -> QName
qual' ('(':nr) = case reverse nr of
    [] -> error "qual' only a '('"
    (')':n) -> case symModSplit (reverse n) of
        ([], s) -> UnQual . Symbol $ s
        ( m, s) -> Qual (ModuleName m) (Symbol s)
    _ -> error "qual' unmatched '('"
qual' ('(':nr) = case reverse nr of
    [] -> error "qual' only a '('"
    (')':n) -> case symModSplit (reverse n) of
        ([], s) -> UnQual . Symbol $ s
        ( m, s) -> Qual (ModuleName m) (Symbol s)
    _ -> error "qual' unmatched '('"