Remove WrappedMonad

David Feuer david.feuer at
Thu Apr 26 02:29:20 UTC 2018


I don't know about *serious* use, but there are at least a few
packages that would need modification if it goes away. The ones I was
able to find in not too many minutes of searching:

It shows up in type signatures in

* lens: Control.Lens.Plated, Control.Lens.Traversal,
Control.Lens.IndexedTraversal, and Control.Lens.Wrapped
* base-orphans: Data.Orphans

It has instances (which would have to be removed) in

* semigroupoids: Data.Functor.Alt, Data.Functor.Apply,
Data.Functor.Bind, Data.Functor.Plus

* pointed: Data.Pointed

Among the GHC boot libraries, it appears to be used only in
containers, which only uses it for old base versions.

On Wed, Apr 25, 2018 at 9:11 PM, Andrew Martin
<andrew.thaddeus at> wrote:
> Control.Applicative features a type named WrappedMonad that is used to
> recover an Applicative instance from a Monad instance. However, since GHC
> 7.10, it hasn't been possible to write an Monad instance without an
> Applicative instance. Consequently, this type is useless (with one caveat
> below). I propose removing this type.
> Trac Ticket:
> GitHub PR:
> On the PR, David Feuer suggests that the type may have some utility
> depending on whether the monad-of-no-return proposal is accepted (and also
> on whether DerivingVia is accepted, but this one seems more sure). If Monad
> keeps return as a typeclass method, then DerivingVia could be used to
> produce an Applicative instance from a Monad instance. If anyone knows the
> status of this proposal, that could be helpful. This aside, all indication
> of approval or disapproval of this proposal are welcome. Also, I'd really
> love to know if anyone is even using this type.
> --
> -Andrew Thaddeus Martin

More information about the Libraries mailing list