Concurrent Clean : Heap Full (4)

[id:lethevert:20060218:p1]で見つけたHeap Fullエラーですけど、結局、理由に思い当たりました。
というか、よくよく考えたら、非正格な評価戦略をとっていることからの自然な帰結としてのHeap Fullエラーだったということなのですが・・・
評価順序を順番に追いかけていくと、

Start = [0..]!!100000

Start = [(0+1)..]!!99999

Start = [((0+1)+1)..]!!99998

...

Start = [((..(0+1)+1..)+1)..]!!?????

=> 'Heap Full' error

で、頭部正格リストなら

Start = [!0..]!!|100000

Start = [!1..]!!|99999

Start = [!2..]!!|99998

...

Start = [!100000..]!!|0

Start = 100000

となり、Heap Fullエラーにならない。
でも、[0..]と書いたときに、上のように非正格に評価されるのが期待されているかというと、そんなことはないのではないかと思う。多分、頭部正格リストの[!0..]のような評価を期待することが普通なのではないだろうか?