[Haskell-cafe] Small optimisation question

Stefan O'Rear stefanor at cox.net
Sat Nov 17 11:17:49 EST 2007


On Sat, Nov 17, 2007 at 04:10:58PM +0000, Andrew Coppin wrote:
> Stefan O'Rear wrote:
>> On Sat, Nov 17, 2007 at 04:01:34PM +0000, Andrew Coppin wrote:
>>   
>>> Suppose I write something like this:
>>>
>>>  foo :: [Int]
>>>  foo = concat (replicate 4 [4,7,2,9])
>>>
>>> The value of "foo" is completely determined at compile-time. So, will the 
>>> compiler generate calls to concat and replicate, or will it just insert a 
>>> large list constant here?
>>>     
>> The compiler will generate calls to concat and replicate.
>>   
>
> OK. I presume this is due to the fact that the result of executing an 
> expression at compile-time could be arbitrarily large?

Yes, and it's not even guaranteed to terminate.

> Are there any buttons that can be twiddled to control this behaviour?

Not that I'm aware of, though you can hack something with RULEs
probably.

> For that matter, when I say "[4,7,2,9]", what does that compile into? Some 
> data structures in memory? Or code to actually build said structures?

Both.  A curious feature of the STG machine is that constructor thunks
and evaluated data are represented identically in memory.

Stefan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20071117/f5c2f51e/attachment.bin


More information about the Haskell-Cafe mailing list