[Haskell-cafe] Flexible instances

Iavor Diatchki iavor.diatchki at gmail.com
Tue Oct 14 23:08:39 EDT 2008


Hi,
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.

-Iavor

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
>> today?
>
> 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
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>


More information about the Haskell-Cafe mailing list