[Haskell-cafe] Problems with strictness analysis?

Don Stewart dons at galois.com
Mon Nov 3 16:54:24 EST 2008


lrpalmer:
> On Mon, Nov 3, 2008 at 2:35 PM, Don Stewart <dons at galois.com> wrote:
> > Consider this program,
> >
> >            isum  0  s = s
> >            isum  n  s = isum (n-1) (s+n)
> >
> >            main = case isum 10000000 0 {- rsum 10000000 -} of
> >                     0 -> print 0
> >                     x -> print x
> >
> > Now, isum is *not* strict in 's', [...]
> >
> > Of course, we make this strict in a number of ways:
> >
> > * Turning on optimisations:
> 
> I am confused about your usage of "strict".  Optimizations are not
> supposed to change semantics, so I don't know how it is possible to
> make a function strict by turning on optimizations.  This function was
> always strict in s, given a strict numeral type.  By induction on n:
> 
>   isum 0 _|_ = _|_
>   isum (n+1) _|_ = isum n (s+_|_) = isum n _|_ = _|_
> 
> For negative n, it either wraps around to positive in which case the
> above analysis applies, or it does not halt, which is strict (in the
> same way "const _|_" is strict).

"Optimisations" enable strictness analysis.

-- Don


More information about the Haskell-Cafe mailing list