Actually, that's not what this conversation is about - it's about what to with those types of bindings instead of the way 1.4 had been doing it.
On Jan 19, 2012, at 10:19 PM, Edward Z. Yang wrote: > Hello Gregory, > > The original (1998!) conversation can be found here: > > http://www.mail-archive.com/haskell@haskell.org/msg03002.html > > I think Simon Peyton-Jones' example really sums up the whole issue: > > But [MonadZero] really sticks in my craw. How can we explain this: > [MonadZero] is not the correct summary here. "(1)" refers to the proposal of replacing the "failable" with "refutable" in the semantics, which leads to the weird example he then gives. > f :: Monad m => m (a,b) -> m a > f m1 = do { x <- m1; return (fst x) } > > g :: MonadZero m => m (a,b) -> m a > g m1 = do { (a,b) <- m1; return a } > > h :: Monad m => m (a,b) -> m a > h m1 = do { ~(a,b) <- m1; return a } > > Why must g be in MonadZero? Because the pattern (a,b) is refutable (by > bottom). > Again, this is the situation under a proposal where MonadZero is still inferred for some bindings, as in 1.4, but not for "unfailable" ones as 1.4 would have specified - for "refutable" ones. All of those would count as unfailable under 1.4 and so none would require MonadZero. -- James _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe