[Haskell-beginners] Confused by type constraints

Daniel Schoepe daniel.schoepe at googlemail.com
Mon Jun 6 16:31:40 CEST 2011

On Sun, 05 Jun 2011 19:53:50 +0300, Guy <guytsalmaves-h at yahoo.com> wrote:
> So in my original example, why isn't "instance Foo (Bar f)" destructing Bar - and making the constraint available?

The "Bar" in "instance Foo (Bar f)" is a type constructor, not a data
constructor like the X in "s (X x)". Hence "instance Foo (Bar f)" isn't
really deconstructing anything, but applying the type constructor Bar to
f, whereas "s (X x)" matches a _value_ of type X.

This might be a bit clearer if you name type and data constructors
differently, e.g.:

data Bar f a = Foo f => MkBar { bar :: f a }

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://www.haskell.org/pipermail/beginners/attachments/20110606/e6eca183/attachment.pgp>

More information about the Beginners mailing list