[Haskell-cafe] Re: Strange subtract operator behavior - and lazy naturals

Aaron Denney wnoise at ofb.net
Mon Oct 22 04:09:15 EDT 2007

On 2007-10-21, Yitzchak Gale <gale at sefer.org> wrote:
> I wrote:
> Yitzchak Gale wrote:
>>> So why not make the laziness available
>>> also for cases where "1 - 2 == 0" does _not_ do
>>> the right thing?
>>> data LazyInteger = IntZero | IntSum Bool Integer LazyInteger
>>> or
>>> data LazyInteger = LazyInteger Bool Nat
>>> or whatever.
> Luke Palmer wrote:
>>     data LazyInteger = IntDiff Nat Nat
>> The only value which would diverge when
>> compared to a constant would be infinity - infinity.
> Hmm. But then you could have integers that are
> divergent and non-infinite. What do we gain by
> doing it this way?

IntDiff is essentially fail-lazily for (Infinity - Infinity), rather
than fail-quickly of the other two.  Sometimes fail-lazily is
appropriate, sometimes not.  I don't think it makes too much difference
here though.  My actual concern is about having to compute with IntDiff
(large) (large + x) many times instead of IntDiff 0 x.  I'd rather one
of the two above, though I think I'd prefer explicity PosInt and NegInt
branches over an inscrutable boolean flag.

Aaron Denney

More information about the Haskell-Cafe mailing list