[Haskell-beginners] How to avoid repeating a type restriction from a data constructor
Daniel Fischer
daniel.is.fischer at googlemail.com
Wed Apr 24 22:18:51 CEST 2013
On Wednesday 24 April 2013, 18:39:15, gs wrote:
> Daniel Fischer <daniel.is.fischer <at> googlemail.com> writes:
> > The point is that the type class dictionary is required to use the class
> > methods, and with a GADT, the dictionary is bundled with the constructor,
> > so pattern-matching makes the dictionary available.
> >
> > Not so with DatatypeContexts, hence the dictionary must be explicitly
> > passed with the context on the function.
>
> So is this more of an implementation issue? No "real" ill-typed programs
> will get through the type checker if the compiler could remember the type
> dictionary without pattern-matching or explicit context?
It's an implementation issue, yes. But DatatypeContexts were specified so that
an implementation wasn't allowed to make the dictionary available without
context.
I don't remember the details, but there are good reasons why GADTs make the
dictionaries only available on pattern-matching, part of it is that with
GADTs, you get type refinement, the constructor matched against is used to
further refine and restrict or instantiate type variables in the function
signature. It could work without pattern-matching for single-constructor
GADTs, I think, but that would require a special case for dubious benefit.
More information about the Beginners
mailing list