Typechecker / OverloadedStrings question 7.8 vs. 7.10

Simon Peyton Jones simonpj at microsoft.com
Fri Jul 31 08:59:55 UTC 2015


|  How hard would it be to give a different error message instead of "No
|  instance ..." when the type variable is ambiguous?  I always find this
|  error slightly misleading, since it seems to me that there are
|  multiple valid instances, not that there is "no instance".

What would you like it to say?  I think it likely we could make it say that!

S

|  -----Original Message-----
|  From: Daniel Bergey [mailto:bergey at teallabs.org]
|  Sent: 31 July 2015 02:23
|  To: Michael Karg; Simon Peyton Jones
|  Cc: ghc-devs
|  Subject: Re: Typechecker / OverloadedStrings question 7.8 vs. 7.10
|  
|  On 2015-07-30 at 21:39, Michael Karg <mgoremeier at gmail.com> wrote:
|  > I guess without that pragma, the string literals already imply t ~
|  []
|  > for Foldable t.
|  
|  You're basically right.  Without OverloadedStrings, a string literal
|  ("foo") is always a String.  With OverloadedStrings, it's free to be
|  any t such that IsString t.  (But it's expected to have a monomorphic
|  type, not the polymorphic "foo" :: forall t. IsString t => t)
|  
|  Hence the second error below - GHC tries to pick a type that is both
|  Foldable and IsString, but that's not a unique combination.
|  
|  >> GHC 7.10 fails with the following errors (whereas 7.8 compiles
|  >> without
|  >> complaining):
|  >>
|  >>
|  >> ghc --make "Testcase.hs"
|  >> [1 of 1] Compiling Main             ( Testcase.hs, Testcase.o )
|  >> Testcase.hs:7:31:
|  >>     No instance for (Foldable t0) arising from a use of ‘elem’
|  >>     The type variable ‘t0’ is ambiguous
|  >>    (...)
|  >>
|  >> Testcase.hs:8:15:
|  >>     No instance for (Data.String.IsString (t0 Char))
|  >>       arising from the literal ‘"$_-"’
|  >>     The type variable ‘t0’ is ambiguous
|  >>     (...)
|  
|  Question for GHC devs:
|  
|  How hard would it be to give a different error message instead of "No
|  instance ..." when the type variable is ambiguous?  I always find this
|  error slightly misleading, since it seems to me that there are
|  multiple valid instances, not that there is "no instance".
|  
|  bergey


More information about the ghc-devs mailing list