I highly recommend writing all existentials using GADT syntax. It is *far* more intuitive.

David

On Mar 20, 2015 1:12 AM, "Lyle Kopnicky" <lists@qseep.net> wrote:
Hi folks,

I know how to write existentially quantified data constructors for single-parameter type classes, but I'm having trouble doing it for multi-parameter type classes. Is it not possible, or am I just using the wrong syntax?

I have this class:

class Collidable a b where
collideWith :: a -> b -> String

And I tried to define an existentially quantified data constructor thusly:

data Collision = forall a. (forall b. Collidable a b => Collision {collider1 :: a, collider2 :: b})

I get a parse error. So then I tried:

data Collision = forall a. forall b. Collidable a b => Collision {collider1 :: a, collider2 :: b}

I get a different parse error. Is there any way to make this work?

Thanks,
Lyle

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe