練習問題 1.3.1
multiply を以下のように定義するものとする.
multiply        ::  (Integer,Integer) -> Integer
multiply (x,y)  =   if x == 0 then 0 else x * ye1 == e2を評価するには,まず
e1と
e2を正規形にまで簡約してから,それぞれの結果が同一であるかどうかをテストすると仮定せよ. 遅延評価の下で,
multiply (0,infinity)の値はどのような値になるか,
multiply (infinity,0)の値はどうか.
それぞれの式の評価は以下のように進む
    multiply (0,infinity)
=   { multiply の定義 }
    if 0 == 0 then 0 else 0 * infinity
=   { 0 == 0 = True }
    if True then 0 else 0 * infinity
=   { if の then 部 }
    0
    multiply (infinity,0)
=   { multiply の定義 }
    if infinity == 0 then 0 else infinity * 0
=   { == の左オペランドの簡約.infinityの定義 }
    if (infinity+1) == 0 then 0 else infinity * 0
=   { infinityの定義 }
    if ((infinity+1)+1) == 0 then 0 else infinity * 0
... 
=   { 停止しない }
    ⊥multiply (0,infinity)の値は
0,
multiply (infinity,0)の値は⊥である.