Because that wouldn't actually help. You couldn't optimize it for different stringy types. Using instance overlap (which is evil), you *could* do something similar.

class Monad m => MonadFail s m where
  fail :: s -> m a
instance {-# OVERLAPPABLE #-} (MonadFail String m, IsString s) => MonadFail s m where
  fail = fail . toString

I don't think this is terribly likely to work well in practice.

On Tue, Nov 30, 2021, 2:16 PM Daneel Yaitskov <dyaitskov@gmail.com> wrote:
Dear Cafe,

MonadFail.fail takes String.
I wasn't able to find MonadFail for custom error type.
Is there any proposals to base?

Let's say Data.Text, which gains popularity with OverloadedStrings extensions.

class MonadFail m where
  fail :: String -> m a

Why not ?
class MonadFail m where
  fail :: (forall s. IsString s => s) -> m a

class MonadFailWith m s where
  fail :: s -> m a







--

Best regards,
Daniil Iaitskov
 


_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.