<div dir="ltr">On Mon, Aug 3, 2015 at 12:43 AM, Phil Ruffwind <span dir="ltr"><<a href="mailto:rf@rufflewind.com" target="_blank">rf@rufflewind.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I think the error message could be made clearer simply by emphasizing the fact<br>
that type ambiguity over the lack of instances.<br>
<br>
    Ambiguous type variable 't0' arising from a use of<br>
      elem :: a -> t0 a -> Bool<br>
    caused by the lack of an instance 'Data.String.IsString (t0 Char)'<br>
    Either add a type annotation to dictate what 't0' should be<br>
    based on one of the potential instances:<br>
      instance Foldable (Either a) -- Defined in ‘Data.Foldable’<br>
      instance Foldable Data.Proxy.Proxy -- Defined in ‘Data.Foldable’<br>
      instance GHC.Arr.Ix i => Foldable (GHC.Arr.Array i)<br>
        -- Defined in ‘Data.Foldable’<br>
      ...plus three others)<br>
    or define the required instance 'Data.String.IsString (t0 Char)'.<br>
</blockquote></div><br></div><div class="gmail_extra">I like this style of error message since it points to the most likely fix first.<br><br></div><div class="gmail_extra">If there are no "potential instances" (instances for specializations of the<br></div><div class="gmail_extra">type we need an instance for) in scope, then we can produce the old<br>"No instance for C t0" error, which suggests that the user write (or import)<br>such an instance. If there is at least one "potential instance" in scope,<br></div><div class="gmail_extra">then (assuming that the user wants to keep their existing instances,<br></div><div class="gmail_extra">and not use overlapping instances) they in fact must specify the type<br></div><div class="gmail_extra">variable somehow.<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">The only case that may still cause confusion is when there is exactly one<br></div><div class="gmail_extra">"potential instance" in scope. Then the user is likely to wonder why the<br></div><div class="gmail_extra">type is ambiguous. It might help to phrase the error message text in a<br>way that implies that the list of instances it displays is not necessarily<br>exhaustive.<br><br></div><div class="gmail_extra">Regards,<br></div><div class="gmail_extra">Reid Barton<br></div></div>