Tom Pledger wrote:
Andrew Wagner <wagner.andrew <at> gmail.com> writes:

I'm sure there's a way to do this, but it's escaping me at present. I want to do something like this:

data Foo = Bar a => Foo a Bool ...

That is, I want to create a new type, Foo, whose constructor takes both a Boolean and a value of a type of class Bar.


Sometimes it's enough to declare

    data Foo a = Foo a Bool

and to put the 'Bar a =>' context onto the functions and instances that
involve Foo.

Although, if you really want to omit the `a` from the type, you can use the ExistentialQuantification extension or GADTs to do something like:

    -- with ExistentialQuantification
    data Foo = forall a . Bar a => Foo a Bool

    -- with GADTs
    data Foo where
            forall a . Bar a => Foo a Bool

I haven't used either extension in a few months though, so I may have gotten the syntax wrong. You can look them up to be sure.

 - Jake
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to