2004-11-01 [長年日記]
λ. Re: 正格性解析
sum' = foldl (+) 0
がInt
やI
だと余計なメモリを食わず、Integer
だと余計なメモリを食ってしまう理由ですが、原因はfoldl
がインライン展開されるかどうかの違いですね(GHC 6.2.1 で確認)。Int
やI
だとfoldl
がインライン展開されて、(+)
の正格性に基づいた最適化がされてます。それにしても、なんでInteger
だとfoldl
がインライン展開されないんだろう……
それはそうと、以下の3つの型は領域(domain)が同型なので、add (I x) (I y) = I (x + y)
とかは(少なくとも理論的には)無意味だと思います。
data I = I !Integer
newtype I = I Integer
Integer
[追記] あうぅ。領域が同型であっても、newtype
とdata
ではパターンマッチの方のセマンティクスが違うのを忘れてました(Haskellはややこしいなぁ)。(+)
がもし仮に非正格でも、この方法で定義したadd
は正格になるので、意味はありますね。すんまそん。
λ. 風邪
先週末から少し調子悪いなと思ってたら、風邪をひいてしまった。今日が慶早戦による休講で助かった。