recursive programming in applicative functors?