
foo :: (Char -> a /\ Bool -> b) -> (a,b)
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.
Uhmm... you mean something like (neglecting TC-related issues here)
class C a b where fromChar :: Char -> a fromBool :: Bool -> b
Oops: i meant something like
class C x a b | x -> a,b where fromChar :: x -> Char -> a fromBool :: x -> Bool -> b
no... let me figure out what I meant. Just somehow to have a single function that takes an argument of two different types without completely ignoring it. class Arg a where whatYouPass :: a -> Something instance Arg Char where whatYouPass = ... instance Arg Bool where whatYouPass = ... Then (foo whatYouPass) :: (Something, Something). Or if it was class Arg a where whatYouPass :: a -> a then (foo whatYouPass) :: (Char, Bool). And I'm sure there are ways to make the return type different if you want to think about FDs etc.
Zun.