
David Menendez
On Sat, May 8, 2010 at 12:15 AM, Ivan Lazar Miljenovic
Well, any time you have a do-block like this you're using failable patterns:
maybeAdd :: Maybe Int -> Maybe Int -> Maybe Int maybeAdd mx my = do x <- mx y <- my return $ x + y
This is true in the sense that the translation for the do syntax in the Haskell report uses fail.
do { p <- e; stmts } = let ok p = do { stmts } ok _ = fail "..." in e >>= ok
However, it's also true that the fails introduced by the translation of maybeAdd will never be invoked, since the two patterns are irrefutable.
Huh? What about "maybeAdd (Just 2) Nothing" ?
That is, maybeAdd would work exactly the same if the do syntax translation were changed to read:
do { p <- e; stmts } = e >>= \p -> do { stmts }
Wait, are you using "irrefutable" as "it will still work if we make do blocks work the way I want"? -- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com IvanMiljenovic.wordpress.com