
I very much feel differently. The Functor instance has been around for a decade and is actually fairly heavily used. It is necessary to support the Applicative for (,) e, which is the anonymous writer monad, like (->) e is the anonymous reader monad, which has also been around for over a decade. Traversable's sequence gives you canonical distributive law for this functor. sequence :: (e, f a) -> f (e, a) The (,) e functor is by far the most common choice of functor for things like lenses to be instantiated with. forall f. Functor f => (a -> f b) -> s -> f t becomes (a -> (e, b)) -> s -> (e, t) giving you a secondary result when you want it. Saying that a bifunctor is Hask*Hask -> Hask doesn't quite work in haskell, but we can say that it is a functor to a functor category: Hask -> [Hask, Hask]. For (,) to be a bifunctor, (,) e should be a functor, or that notion falls apart as (,) e isn't a functor in the functor category. The list goes on. -Edward On Thu, Feb 18, 2016 at 10:11 AM, Kosyrev Serge <_deepfire@feelingofgreen.ru
wrote:
Andreas Abel
writes: +1.
On 17.02.2016 12:15, Henning Thielemann wrote:
I like consistency, too, and thus propose to remove all Functor, Foldable, Traversable, Applicative instances from all tuples.
Is there really a convincing case for these instances -- at all?
The confusion and the inevitable bug potential, that they create, seem to overwhelm any potential usefulness that comes to my imagination.
But maybe someone feels differently?
-- с уважениeм / respectfully, Косырев Сергей