Yes, I agree with this, and I'd already snuck it into the
rewrite of the Enum section that I had to do anyhow.

Would you like to read the section (6.3.4) and see if
you think it is better specified now?

Simon

| -----Original Message-----
| From: Josef Svenningsson [mailto:[EMAIL PROTECTED]] 
| Sent: 02 November 2001 15:54
| To: Simon Peyton-Jones
| Cc: Ian Lynagh; [EMAIL PROTECTED]
| Subject: RE: Stack overflow
| 
| 
| Hi!
| 
| OK, so the Int instance for Enum is a bit naughty in that 
| [bottom..] is bottom. But then one can argue that all 
| instances of Enum should be naughty in this respect. The 
| argument is as follows and uses the default declaration of 
| enumFrom in the Enum class (I've added some types with the 
| intention to clarify a bit what's happening):
| 
| [bottom..] :: [Integer]
|  = { Syntactic sugar, section 3.10 }
| enumFrom bottom :: [Integer]
|  = { Using the default definition of enumFrom in the Enum 
| class } map toEnum ([fromEnum bottom ..] :: [Int])  = { 
| fromEnum is strict } map toEnum ([bottom..] :: [Int])  = { 
| according to Simon } map toEnum (bottom :: [Int])  = { map is 
| strict in it's second argument } bottom
| 
| Note that I've assumed that fromEnum is strict. I'd say this 
| is a pretty reasonable assumption.
| 
| The key thing here is that the Report assumes that there is 
| an instance Enum Int which it uses in the default 
| declarations. One could wish that the report gave some more 
| detail about the Int instance of Enum at least. Then one 
| could use that to derive the behavour of the other instances, 
| using the default definitions like I did above.
| 
| The bottom (:-) line, from how I interpret the Report, is 
| that the instances of Int and Integer should at least have 
| the same behaviour in this respect. But exactly how they 
| should behave is up to the implementor. I'd vote for the 
| strict version.
| 
| Cheers,
| 
|       /Josef
| 
| 
| On Fri, 2 Nov 2001, Simon Peyton-Jones wrote:
| 
| > The [1..] generates [1,1+1,1+1+1,1+1+1+1, ...]
| > Those thunks all go into the heap.  Then last grabs
| > the last one and evaluates it, so they all go on the
| > stack. Result death.
| >
| > The Int instance for Enum is a bit naughty in GHC:
| > it is strict.  That is [bottom..] is bottom rather than
| > being [bottom,bottom,bottom...].  (Actually the
| > Report is vague on this point; sigh.)
| >
| > So the Int instance evaluates as it goes, while the
| > Integer instance does not.  Maybe we should
| > make the Integer instance strict too.
| >
| > Simon
| >
| >
| >
| > | -----Original Message-----
| > | From: Ian Lynagh [mailto:[EMAIL PROTECTED]]
| > | Sent: 02 November 2001 14:32
| > | To: [EMAIL PROTECTED]
| > | Subject: Stack overflow
| > |
| > |
| > |
| > | With
| > |
| > | main = putStrLn $ show $ last $ zip [1..] (replicate 100000 'a')
| > |
| > | I get
| > |
| > | Stack space overflow: current size 1048576 bytes.
| > | Use `+RTS -Ksize' to increase it.
| > |
| > | If I Change the [1..] to ([1..] :: [Int]) then it works fine.
| > |
| > |
| > | Ian
| > |
| > |
| > | _______________________________________________
| > | Glasgow-haskell-bugs mailing list [EMAIL PROTECTED]
| > | http://www.haskell.org/mailman/listinfo/glasgow-| haskell-bugs
| > |
| >
| > _______________________________________________
| > Glasgow-haskell-bugs mailing list [EMAIL PROTECTED]
| > http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
| >
| 
| 
| 
| _______________________________________________
| Glasgow-haskell-bugs mailing list 
| [EMAIL PROTECTED] 
| http://www.haskell.org/mailman/listinfo/glasgow-| haskell-bugs
| 

_______________________________________________
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to