transformers: remove instance MonadFix ExceptT and ErrorT

Edward Kmett ekmett at gmail.com
Tue Aug 12 19:17:02 UTC 2014


Note: This follows how MonadFix works for *every* Monad involving a sum
type currently.

instance MonadFix Maybe where    mfix f = let a = f (unJust a) in a
         where unJust (Just x) = x                   unJust Nothing  =
error "mfix Maybe: Nothing"


instance MonadFix (Either e) where    mfix f = let a = f (unRight a)
in a             where unRight (Right x) = x                   unRight
(Left  _) = error "mfix Either: Left"


so it seems the logical extension of your request would be to strip all
such instances, which seems to me to speak to you having a different
interpretation of the purpose of mfix than its original authors.

-Edward


On Tue, Aug 12, 2014 at 5:13 AM, Henning Thielemann <
schlepptop at henning-thielemann.de> wrote:

> I propose to remove the MonadFix instance for the ExceptT transformer,
> because it gives the illusion that it can handle exceptions, which it
> cannot.
>
>
> The current implementation is:
>
> instance (MonadFix m) => MonadFix (ExceptT e m) where
>     mfix f = ExceptT $ mfix $ \ a -> runExceptT $ f $ case a of
>         Right x -> x
>         Left _ -> error "mfix ExceptT: Left"
>
> You see, that it cannot handle the exception case. Whenever someone needs
> an mfix on ExceptT I strongly suggest that he first handles the exception,
> thus turning (ExceptT e m a) into plain (m a) and then calls 'mfix' only on
> (m a).
>
>
> I further propose to declare the MonadFix instance as non-implementable in
> a way suggested in [1]:
>
> class NoMonadFix m where
>
> instance (NoMonadFix m) => MonadFix (ExceptT e m) where
>    mfix = error "unimplementable"
>
> where no instance of NoMonadFix exist and NoMonadFix is not exported.
> Whenever someone tries to call 'mfix' on 'ExceptT e m' he will get the type
> error, that a NoMonadFix instance on 'm' is missing and he will not be able
> to add it.
>
>
>
> [1] http://ghc.haskell.org/trac/ghc/ticket/9334#comment:9
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140812/dd130d2d/attachment.html>


More information about the Libraries mailing list