dons: > dbenbenn: > > On 12/21/07, Stefan O'Rear <[EMAIL PROTECTED]> wrote: > > > Because they simply aren't the same. > > > > Good point; thanks. That means that Don's patch could theoretically > > break some existing Haskell program: > > > > Prelude> length $ take 10 ([undefined ..] :: [Integer]) > > 10 > > That's right. It makes Integer behave like the Int instance.
And we see again that strictness properties are very ill-defined, here, the Enum types in base: Prelude> length $ take 10 ([undefined ..] :: [Int]) *** Exception: Prelude.undefined Prelude> length $ take 10 ([undefined ..] :: [()]) *** Exception: Prelude.undefined Prelude> length $ take 10 ([undefined ..] :: [Ordering]) *** Exception: Prelude.undefined Prelude> length $ take 10 ([undefined ..] :: [Bool]) *** Exception: Prelude.undefined But, Prelude> length $ take 10 ([undefined ..] :: [Float]) 10 Prelude> length $ take 10 ([undefined ..] :: [Double]) 10 And, Prelude> length $ take 10 ([undefined ..] :: [Integer]) 10 Now, Prelude> length $ take 10 ([undefined ..] :: [Integer]) *** Exception: Prelude.undefined So we see that Float and Double also have this problem, Prelude> head (drop 10000000 [1 .. ]) :: Float *** Exception: stack overflow Prelude> head (drop 10000000 [1 .. ]) :: Double *** Exception: stack overflow People shouldn't be writing code that depends on this! -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe