Hi, I believe this can be done with enough type hacking but I am not sure how...
Consider the use existentials to implement a list of composable functions using something like: data F a b = forall c. PushF (a -> c) (F c b) | Bottom (a -> b) For example: f1 :: Char -> Bool f1 'a' = True f1 _ = False f2 :: Bool -> String f2 True = "true" f2 False = "false" f3 :: String -> Int f3 = length fs :: F Char Int fs = PushF f1 (PushF f2 (PushF f3 (Bottom id))) Is it possible to write a function f :: F a b -> T c -> F c b where (T c) is some type for values of type 'c' or values representing the type 'c' or whatever is appropriate. Thus if given the representation of Bool, the function should return: PushF f2 (PushF f3 (Bottom id)) and if given the representation of String the function should return PushF f3 (Bottom id) and so on. I hope the question makes sense. Thanks. --Amr _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell