[Haskell] Probably a trivial thing for people knowing Haskell

Brandon S. Allbery KF8NH allbery at ece.cmu.edu
Sun Oct 19 11:43:09 EDT 2008

On 2008 Oct 19, at 11:25, Friedrich wrote:
> Ok to  be more concrete is the laziness "hidden" here?
> check_line line sum count =
>    let match = matchRegex regexp line
>        in case match of
>               Just strs -> (sum + read (head strs) :: Integer, count  
> + 1)
>               Nothing -> (sum, count)

For starters, "let" is lazy.  "case" is strict to the extent that it  
has to evaluate enough to decide if the result is Just or Nothing, but  
that's useless if the code leading up to its application is lazy.  I  
don't know how lazy matchRegex is, if it is lazy enough then all that  
gets evaluated by the case is just enough to know if the result is  
Just or Nothing but not the value of "strs".  (One obvious possibility  
is that it determines that there *are* strings, but not what they  
are.)  Everything else is automatically lazy.

So, unless the caller forces the result of this function, you are very  
likely to end up with a chain of partially evaluated matches that  
don't get resolved until the result is printed.

brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery at kf8nh.com
system administrator [openafs,heimdal,too many hats] allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university    KF8NH

More information about the Haskell mailing list