[Haskell-cafe] Flexible instances
iavor.diatchki at gmail.com
Tue Oct 14 23:08:39 EDT 2008
There is some discussion about the different design choices relevant
for Haskell's class system in the following paper:
"Type classes: exploring the design space"
Simon Peyton Jones, Mark Jones, Erik Meijer
Presented at the 1997 Haskell Workshop.
Section 4.5 discusses options related to the restrictions on the instance heads.
On Tue, Oct 14, 2008 at 7:32 PM, Derek Elkins <derek.a.elkins at gmail.com> wrote:
> On Tue, 2008-10-14 at 19:20 -0700, George Pollard wrote:
>> I'm a little confused. Why is this allowed:
>> > data Blah = Blah
>> > instance Eq Blah where
>> > x == y = True
>> But not this:
>> > class Stringable a where
>> > toString :: a -> String
>> > instance Stringable [Char] where
>> > toString = id
>> (Resulting in:)
>> > Illegal instance declaration for `Stringable [Char]'
>> > (All instance types must be of the form (T a1 ... an)
>> > where a1 ... an are distinct type *variables*
>> > Use -XFlexibleInstances if you want to disable this.)
>> > In the instance declaration for `Stringable [Char]'
>> 'Blah' isn't a type variable, is it? Is my brain just not working right
> Blah = T
> for [Char], T =  and a1 = Char where it should be a variable.
> Why this is an error is basically because the Report says so.
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe