
On 15.09.2010, at 13:41, José Pedro Magalhães wrote:
Ah, I now see what you mean. Yes, you are right: regular does not abstract over type parameters, hence you can't do much to them. We have a similar library which does abstract over one parameter, though. It's called generic-deriving on Hackage, and used by the Utrecht Haskell Compiler [1, 2].
This looks quite interesting, thanks.
However, in your application of shape to Tree, I see that you want to replace not only the parameters but also the recursive occurrences.
I don't see what you mean here.
For curiosity: what do you want this shape function for?
This is probably a quite odd "application". I have proved some properties about functions f :: [a] -> [a] by representing them by a combination of (!!) and a function shape. That is, we have f xs == map (!!xs) (shape xs) where shape has the type [a] -> [Int] and simply numbers the elements of the list. I want to generalize these statements to functions f :: F a -> G a where F and G are arbitrary functors by providing generalizations of shape and (!!) for arbitrary functors. Cheers, Jan