这是一个模块:
module Foo where
foo ws = let ws' = take 3 $ ws ++ repeat mempty
x = ws' !! 0
y = ws' !! 1
z = ws' !! 2
in [x, y, z]
这是另一个
module Foo where
foo ws = let (x:y:z:_) = take 3 $ ws ++ repeat mempty
in [x, y, z]
通过ghc -O2 -c foo.hs
,它们分别编译为 8072 和 5288 字节。不确定哪个最好,也不知道如何测试它们,但我猜它们在性能方面不可能表现完全相同,因为它们是不同的。
这两个函数的执行结果有什么不同吗?如果没有,那么生成的二进制文件中的差异是否是由于优化失误造成的?还是其他原因?
以下是一个明显的区别: