[Haskell-cafe] better way to do this?
mpm at alumni.caltech.edu
Mon Oct 5 10:22:15 EDT 2009
Eugene Kirpichov wrote:
> [x,y,t,b,l,r] <- mapM (getStdRandom . randomR) [(-10,10), (-70,70), ...]
> return (BoxBounds ...)
I'm curious about the idea of "pattern matching in do-statements that can
fail." This particular pattern cannot fail. I read that the "fail" function
was introduced to Monad in order to handle pattern matches that fail, and
that most members of haskell-cafe seem to think that was a mistake---that
MonadZero should have been used instead. I.e., any do-block with a pattern
that can fail should explicitly have a MonadZero class constraint.
This leads to my question about detecting pattern matches that could fail.
We can easily prove the above pattern will never fail. I'm wondering if the
compiler infers this. And if a future version of Haskell dumps "fail" and
used MonadZero to replace it, would that future Haskell compiler need to
infer, in all cases, whether a pattern can fail? Is it simple enough to
make that correct inference?
More information about the Haskell-Cafe