Brandon S. Allbery KF8NH wrote:
On Dec 24, 2007, at 13:18 , Isaac Dupree wrote:
Paulo J. Matos wrote:
On Dec 23, 2007 12:44 PM, Isaac Dupree <[EMAIL PROTECTED]> wrote:
parseHeader3 bs = do
(x, rest) <- BS.readInt $ BS.dropWhile (not . isDigit) bs
(y, _) <- BS.readInt $ BS.dropWhile (not . isDigit) rest
return (x, y)
What happens then if the first BS.readInt return Nothing???
when the first one returns Nothing, the whole expression becomes
Nothing without examining the later parts of computation (as Chaddaï
said)
One thng that's not obvious here is that pattern match failure
translates to a call to "fail", which in the definition of Monad for
Maybe becomes Nothing.
(Hm. Isaac: I thought that translation only happened for the "do"
sugar, and in the direct case you must do it yourself or Haskell raises
the "incomplete pattern match" exception?)
Tuple-matching never fails (except for _|_) -- there's only one
constructor. In this case it's only the intrinsic failure of
BS.readInt. You're thinking of something like
do
[a,b] <- readListOfInts foo
return (a+b)
--readListOfInts is a function I made up :: String -> Maybe [Int]
which can fail
(1) if readListOfInts returns Nothing
(2) because of the do-notation, also if the list doesn't have exactly
two elements in it.
Isaac
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe