[Haskell-cafe] [Haskell] Functor => Applicative => Monad

Lennart Augustsson lennart at augustsson.net
Wed Dec 15 10:39:13 CET 2010


Any refutable pattern match in do would force MonadFail (or MonadPlus if you
prefer).  So
1.  (MonadFail m) => a -> m a,   \ a -> return a
2.  (MonadFail m) => m a,   mfail "..."
3.  (MonadFail m) => Maybe a -> m a,   \ a -> case a of Nothing -> mfail
"..."; Just x -> return x
4.  (Monad m) => a -> b -> m a,   \ a b -> return a
5.  (Monad m) => (a, b) -> m a,   \ (a, b) -> return a

As far as type inference and desugaring goes, it seems very little would
have to be changed in an implementation.

  -- Lennart

2010/12/15 Tillmann Rendel <rendel at informatik.uni-marburg.de>

> Hi John,
>
>
> John Smith wrote:
>
>> Perhaps pattern match failures in a MonadPlus should bind to mzero - I
>> believe that this is what your example and similar wish to achieve.
>>
>
> You updated the proposal to say:
>
>> a failed pattern match should error in the same way as is does for pure
>> code, while in
>> MonadPlus, the current behaviour could be maintained with mzero
>>
>
> Can you be more specific as to how that would interact with polymorphism
> and type inference? What does it mean to be "in MonadPlus"? How does the
> compiler know?
>
> For example, what would be the static types and dynamic semantics of the
> following expressions:
>
>  1. \a -> do {Just x <- return (Just a); return x}
>
>  2. do {Just x <- return Nothing; return x}
>
>  3. \a -> do {Just x <- a; return x}
>
>  4. \a b -> do {(x, _) <- return (a, b); return x}
>
>  5. \a -> do {(x, _) <- return a; return x}
>
>    Tillmann
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20101215/7f1befe0/attachment.htm>


More information about the Haskell-Cafe mailing list