concrete functor and monad transformers
#2Remove orphan Either instances from Control.Monad.Trans.Error
Currently, Control.Monad.Trans.Error exports a number of orphan instances for IO and Either, and notably, some Either instances that are exported by later versions of base (if a version prior to base-4.3.0.0 is being used).
I want to advocate for those instances to be removed. One reason is that orphan instances tend to lead to surprising behavior (http://stackoverflow.com/questions/26770247/haskells-type-checker-is-allowing-a-very-wrong-type-replacement-and-the-progra), and moreover, there is currently a movement to merge these very instances into base (https://ghc.haskell.org/trac/ghc/ticket/9588).
A more personal reason is that I am working on a base-orphans package (http://hackage.haskell.org/package/base-orphans), and I feel that it would be more fitting to backport the Applicative, Monad, and MonadFix instances for Either in base-orphans. At the moment, however, putting them in base-orphans would lead to an error down the road if somebody using an old GHC version were to use base-orphans and transformers in the same package, since they'd both export the same instances.
As far as I can tell, transformers builds just fine without the orphan instances, so I'd think this would be an acceptable alongside a major version bump.
The module has been deprecated since May 2014, so while it's probably too early to remove it altogether, deleting these instances seems reasonable.
- status set to closed
done