
djinn[1] can derive some glue functions for you. you tell it something like
glue :: (x -> y -> z -> (b,(c,a)) -> (c -> a -> d) -> x -> y -> z -> d and it tells you something like glue f g x y z = let (b,(c,a)) = f x y z in g c a I changed the type of f slightly to avoid the trivial answer glue _ g a _ c = g c a
[1] http://hackage.haskell.org/package/djinn
2010/10/9 André Batista Martins
Might have not been clear, but i will try illustrate .
f:: a-> b -> c -> (b,(c,a))
f1 :: c -> a -> d
input type: A B C ---------- | f | | _____ |
output (B,(C,A))
C A ---------- | f1 | | _____ |
output D
If i want compose f and f1, i need to do a correct input to f1 from the output of f. So i want one function to convert the output of "f" to input off "f!". In this case, we do f1 fst (snd (t,(t1,t2))) snd (snd (t,(t1,t2))) But i want do this automaticaly, for type of any two function. I search for the "glue".
I don't have any concern about what the function does, i only have interess on input and output types.
Cheers, André
No dia 9 de Outubro de 2010 22:38, André Batista Martins
escreveu: Hello, exists any algorithm to determine how terms can be changed to safisty the type of one function?
example:
f:: a-> b -> c -> (b,c,a)
f1 :: c -> a -> d
In my first function "f" i want assign the output "c" and "a" for to input of function "f1". I searched for any solution, but i didn't find any anything.
One clue i have found is "minimal edit distance algorithm" for 2 strings. Perhaps if i convert de output type of "f" to one string, and de input of "f1" to another string and then use this algorithm , i will get one "dirty" solution...
I'm open to any sugestion.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe