lrpalmer: > On Mon, Nov 3, 2008 at 2:35 PM, Don Stewart <[EMAIL PROTECTED]> 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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe