
On Tue, May 11, 2010 at 02:01:05PM -0400, Gordon J. Uszkay wrote:
I would like to build a class that includes a method to move data from one arbitrary functor to another, a natural transformation. The structures might be more than just functors, but I can start with that. I ran into some practical issues with resolving the type variables for my multiparameter type class, which I can resolve with functional dependencies. I can also not isolate the natural transformation from my overall operation, muddling it with the element transformation. I was wondering if anyone had any words of advice, example or warning about this kind of function or method in general?
Class (Functor f, Functor g) => Foo f g a where foo :: f a -> g a bar :: (a->b) -> g a -> g b
A couple points, * why is 'a' a member of the type class head? Functors don't care about what is stored inside the type, so your class shouldn't either if it is a transformer from functor to functor. * isn't bar exactly the same as 'fmap' for g? A better way might be class (Functor f, Functor g) => FunctorPair f g where transformFunctor :: f a -> g a though, I am not sure what your use is, there isn't an obvious instance to me, but I don't know what your motivating task is. John -- John Meacham - ⑆repetae.net⑆john⑈ - http://notanumber.net/