Fixed point of n-mutually recursive functors
Johan Jeuring
johanj@cs.uu.nl
Wed, 22 May 2002 07:56:27 +0200
> I can also define the fixed-point of 2 mutually recursive bifunctors =
as:
>
>> data Fix21 f g =3D In21 (f (Fix21 f g) (Fix22 f g))
>> data Fix22 f g =3D In22 (g (Fix21 f g) (Fix22 f g))
>
> where bifunctors can be captured in the type class
>
>> class Functor2 f
>> where map2 :: (a1 -> b1) -> (a2 -> b2) -> f a1 a2 -> f b1 b2
>
> Now, I would like to generalize those definitions to n-functors.
>
> Is it possible?
I don't think this is possible in plain Haskell 98.
It is possible in Generic Haskell, see:
http://www.generic-haskell.org/
or
Ralf Hinze. Polytypic values possess polykinded types. In Roland=20
Backhouse, J.N. Oliveira, editors, Proceedings of the Fifth=20
International Conference on Mathematics of Program Construction (MPC=20
2000), Ponte de Lima, Portugal, July 3-5, 2000, =A9 Springer-Verlag.
> If it isn't, what kind of type system would I need?
Generic Haskell's type system is sufficient.
> Is it possible using dependent types?
I would expect so.
A pointer to mutually recursive cata's (and functors):
Swierstra, S.D. and Azero Alcocer, P.R. and Saraiava, J., Designing and=20=
Implementing Combinator Languages, In: Advanced Functional Programming,=20=
Third International School, AFP'98, Springer-Verlag, LNCS 1608,=20
150-206,1999.
-- Johan Jeuring