Another valid type for foo can be done AFAICS with intersection types:

   foo :: (Char -> a /\ Bool -> b) -> (a,b)

But I can not comment about their inference, or usefulness in practice.

Again, undecidable :) In fact, I believe that an inference algorithm for
intersection types is equivalent to solving the halting problem. Type
checking however is decidable, but expensive.

a.k.a. find some value that matches both Char->a and Bool->b for some a and b. Could use type-classes to do it.

But why, when we can just use standard tuples instead?
foo :: (Char -> a , Bool -> b) -> (a,b)

Admittedly this function is isomorphic to type (Char,Bool)... but that's a different issue, with the arbitrariness of our choice of example function.

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

Reply via email to