inside the GHC code generator

Bulat Ziganshin bulat.ziganshin at gmail.com
Fri Feb 24 13:50:56 EST 2006


Hello Lemmih,

Friday, February 24, 2006, 8:55:37 PM, you wrote:

>> x :: ![Int]
>>
>> translates to the
>>
>> data StrictList a = Nil | Cons a !(StrictList a)
>> x :: !(StrictList a)

L> Let's try this:

L> x :: ![Int] -> Int

L> It would translate to something like this:

L> mkStrictList :: [a] -> StrictList a
L> x = xStrict . mkStrictList
L> xStrict = ...

L> Wouldn't it be very expensive to strictify the list?

yes, it would. but evaluating list as lazy one on EACH repetition of
some loop will cost much more. just for example - i found that the
cycle

repeat 6666666 (putStr (replicate 15 ' '))

works several times slower than

repeat (10^8) (putChar ' ')

if argument of putStr will be evaluated only one time then much of
difference will gone. of course, that is just benchmark. but there are
cases when i prefer to work with strict datastructures and specialize
my functions accordingly. typically it's the cases where time/space
are really critical

-- 
Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com



More information about the Glasgow-haskell-users mailing list