[Haskell-cafe] Strictness is observable

Daniel Fischer daniel.is.fischer at googlemail.com
Fri Apr 1 11:20:11 CEST 2011


On Friday 01 April 2011 10:49:53, Yves Parès wrote:
> Then if you turn :
> 
> fs True = True
> fs x = True
> 
> to:
> 
> fs x = case x of
>     True -> True
>     x' -> True
> 
> Is it still strict, or does 'fs' wrap the case test and defer
> evaluation?

It's still strict, to produce a result, fs has to pattern-match its 
argument, pattern matching is strict.

The report says:
"Patterns appear in lambda abstractions, function definitions, pattern 
bindings, list comprehensions, do expressions, and case expressions. 
However, the first five of these ultimately translate into case 
expressions, so defining the semantics of pattern matching for case 
expressions is sufficient. "

So I think the report mandates that both forms are equivalent.

You get exactly the same code as for 

gs :: Bool -> Bool
gs x = x `seq` True

or

hs :: Bool -> Bool
hs x = if x then True else True

with GHC (with or without optimisations) btw.



More information about the Haskell-Cafe mailing list