Why WrappedMonad and WrappedArrow?
Pretty much so for WrappedMonad
. I guess it is becoming (and perhaps already was) essentially obsolete. But WrappedArrow
is more difficult, because Arrow
types and Applicative
types have different kinds, * -> * -> *
vs. * -> *
. And because of the way GHC instance resolution works, adding the instance (I assume the extra Arrow
was a typo)
instance Arrow a => Applicative (a b)
would mean that no type constructor with two or more arguments could then give an Applicative
without also giving an Arrow
- that seems rather drastic.
The reverse option of adding a superclass Applicative (a b) =>
to Arrow a
would seem more palatable - except you cannot have superclasses with a forall'ed type like b
. Such superclasses would be useful for other things as well, and have been suggested many times, so I assume it is hard to implement well.