[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