On 9/16/07, Mads Lindstrøm <[EMAIL PROTECTED]> wrote:
> Hi all
>
> If I have this type:
>
>   data Foo a b = ...
>
> and this class
>
>   class Bar (x :: * -> *) where ...
>
> I can imagine two ways to make Foo an instance of Bar. Either I must
> "apply" the 'a' or the 'b' in (Foo a b). Otherwise it will not have the
> right kind. To "apply" the 'a' I can do:
>
>   instance Bar (Foo a) where ...
>
> But what if I want to "apply" the 'b' ? How do I do that ?
>
>
> Greetings,
>
> Mads Lindstrøm
>
>
> _______________________________________________
> Haskell mailing list
> [EMAIL PROTECTED]
> http://www.haskell.org/mailman/listinfo/haskell
>


(Redirecting to Haskell-Cafe)

I think the easiest way to make it work is with a newtype wrapper
around 'Foo a b' that swaps the arguments, like Brent mentioned.

Without it you need some kind of type level lambda abstraction. Something like:

instance Bar (\x -> Foo x b) where ...

But this is not valid Haskell.

cheers,

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

Reply via email to