许多函数式编程语言的编译器都有Lambda Lifting通过,我想知道,这是实现函数式编程语言的最佳方法吗?
让我们考虑以下示例:
foo :: Int -> Int -> Int
foo = \x -> \y -> x * x * x + y
main = print $ sum (map (foo 5) [0..100])
如果不使用lambda提升,我们只需要计算x * x * x
1次,但是如果使用lambda提升,我们将需要计算x * x * x
100次。
所以我想知道,即使在上述情况下,GHC是否也总是进行lambda提升?有必要吗?还是有其他替代的FP lang编译技术可以更好地处理上述情况?