
On Tue, Nov 23, 2010 at 11:40:40AM -0500, roconnor@theorem.ca wrote:
Discussion so far.
There are three aspects of functors that can be "reversed"
1. Foldable-Traversable 2. Applicative 3. Alternative-MonadPlus
It appears at first glance that all three of these aspects are independent and thus we would need three different wrappers to implement the three separate functionality. For example lists have all three aspects and one can imagine possibly reversing list instances independently in each of the aspects.
Ignoring 3 for the moment, there are basically two choices: (1) the current design, with a single type constructor that reverses the order of Applicative effects and also the order of Foldable and Traversable: http://hackage.haskell.org/packages/archive/applicative-extras/0.1.6/doc/htm... (2) two type constructors, both with derived Functor instances: * one morally equivalent to reversing the arguments of all the data constructors: Foldable and Traversable process elements in the reverse order, but other instances (Applicative and Monad) are derived. * one with an Applicative instance that reverses the order of effects, but Foldable and Traversable are derived. There wouldn't be a Monad instance, because it's not possible to define one that's compatible with the Applicative instance. The second design seems slightly cleaner to me, though it's not a big deal.