recursive programming in applicative functors?

Is there a fixpoint operator for applicative functors, like mfix for MonadFix and loop for ArrowLoop?

On Thu, Mar 15, 2007 at 09:34:21AM -0700, Conal Elliott wrote:
Is there a fixpoint operator for applicative functors, like mfix for MonadFix and loop for ArrowLoop?
Hmm, there could be an afix :: (a -> f a) -> f a; I wonder what axioms it would satisfy. These ones for mfix would carry over: purity afix (pure . h) = pure (fix h) sliding afix (fmap h . f) = fmap h (afix (f . h)), for strict h. nesting afix (\x -> afix (\y -> f x y)) = afix (\x -> f x x) but there'd be no way to express tightening laws. Perhaps afix (\(x, y) -> pair (f x) (g y)) = pair (afix f) (afix g) where pair a b = (,) <$> a <*> b Do you have any non-monadic examples in mind? I guess zip-lists are one possibility.
participants (3)
-
Ashley Yakeley
-
Conal Elliott
-
Ross Paterson