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 <andre_bm@netcabo.pt> 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.