@@ -165,16 +165,16 @@ toReport source localizer err =
165165 )
166166
167167 AmbiguousVar region maybePrefix name possibleHomes ->
168− error "TODO" region maybePrefix name possibleHomes
168+ ambiguousName source region maybePrefix name possibleHomes "name"
169169
170170 AmbiguousType region maybePrefix name possibleHomes ->
171− error "TODO" region maybePrefix name possibleHomes
171+ ambiguousName source region maybePrefix name possibleHomes "type"
172172
173173 AmbiguousCtor region maybePrefix name possibleHomes ->
174− error "TODO" region maybePrefix name possibleHomes
174+ ambiguousName source region maybePrefix name possibleHomes "constructor"
175175
176176 AmbiguousBinop region name possibleHomes ->
177− error "TODO" region name possibleHomes
177+ ambiguousName source region Nothing name possibleHomes "operator"
178178
179179 BadArity region badArityContext name expected actual ->
180180 let
@@ -806,6 +806,36 @@ nameClash source r1 r2 messageThatEndsWithPunctuation =
806806
807807
808808
809+-- AMBIGUOUS NAME
810+
811+
812+ambiguousName :: Code.Source -> R.Region -> Maybe N.Name -> N.Name -> [ModuleName.Canonical] -> String -> Report.Report
813+ambiguousName source region maybePrefix name possibleHomes thing =
814+ let
815+ givenName =
816+ maybe N.toString toQualString maybePrefix name
817+
818+ homeToYellowDoc (ModuleName.Canonical _ home) =
819+ H.dullyellow (H.nameToDoc home)
820+
821+ bothOrAll =
822+ if length possibleHomes == 2 then "both" else "all"
823+ in
824+ Report.Report "AMBIGUOUS NAME" region [] $
825+ Report.toCodeSnippet source region Nothing
826+ (
827+ H.reflow $ "This usage of `" ++ givenName ++ "` is ambiguous."
828+ ,
829+ H.stack
830+ [ H.reflow $ "The following modules " ++ bothOrAll ++ " export this " ++ thing ++ ":"
831+ , H.indent 4 $ H.vcat $ map homeToYellowDoc possibleHomes
832+ , H.reflowLink "Read" "imports" "to learn how to clarify which one you want."
833+ ]
834+ )
835+
836+
837+
838+
809839-- NOT FOUND
810840
811841