[Haskell-beginners] question on typeclasses and applicatives
daniel.is.fischer at web.de
Thu Sep 2 16:31:47 EDT 2010
On Thursday 02 September 2010 22:06:45, Alec Benzer wrote:
> > Because the language specification imposed that instance declarations
> > must have the form
> I guess I meant why does the language specification impose this?
Historical accident, probably. Perhaps it's easier to implement.
> > instance Class (T a1 a2 ... an) where ...
> > where T is a type constructor, 0 <= n and a1, a2, ..., an are
> > *distinct* type variables.
> I don't understand, what you you mean by distinct? Like how is String
> not a distinct type variable by itself?
distinct = different, however, String is not a type variable, it's a type
(more specifically, a type synonym). Type variables start with a lowercase
letter, things starting with an uppercase letter are type constructors (in
this context), same as for values
f True = whatever -- True is a data constructor
f true = whatever -- true is a variable, matches anything
So in Haskell98 (and Haskell2010),
instance Class (Either a b) where ...
is a legal instance declaration, the instance head is a type constructor
(Either) applied to two distinct type variables.
Not legal are
instance Class (Either a a) where ...
(type variables not distinct),
instance Class (Either Char a) where ...
(Char is not a type variable).
It's an inconvenient restriction, so you can turn on FlexibleInstances to
allow the latter two instances (not both in the same programme, though,
that would need the dreaded OverlappingInstances).
More information about the Beginners