Jason Dagit wrote:
On 11/23/06, Conor McBride <[EMAIL PROTECTED]> wrote:

*Grr> ifM (Just True) (Just 3) Nothing
Nothing

More care required!

Thank you.  Now that you point this out I recall that I've made this
mistake in the past

You and me both. It's really insidious and can hide for weeks, looking perfectly innocent and
doing all sorts of mad stuff.

Ross and I talk about this issue in our 'Applicative' paper. It's really what distinguishes monads from applicative functors. Monads let you use the value from one computation to choose which *computation* to run next; applicative functors fix the structure of computations but allow you to do what you like with the *values*.

So, again, I know it's not going to happen in the immediate future, but I hope we will eventually adopt Ashley's Functor Hierarchy proposal, then shift the liftM family to the Applicative layer, where they belong. The fact that the above ifM can be typed with Applicative m, not just Monad m, is the clue to why it is broken.

All the best

Conor

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to