在 Haskell 中,考虑到其惰性,将经常计算的值存储为数据成员是否更好,或者在标准的非扩展 Haskell 中不这样做是否安全。
为了更好地理解我的意思,举个例子:
data Image = Image { size :: Int, inverse_size :: RealFrac }
new_image size = Image { size = size, inverse_size = 1.0 / fromIntegral size }
或者我应该在使用它的地方声明它,假设它function
经常被调用:
data Image = Image { size :: Int } -- no tainting
something (Image size) =
let inverse_size = 1.0 / fromIntegral size -- possibly make a function of it
in ...
作为一种懒惰的语言,并且来自 C++ 模板元编程,我不确定 Haskell 会记住多少这样的计算。
这在运行时速度和存储方面有什么不同吗?