Optimization GHC`elem`优化
考虑LYAH的以下函数:Optimization GHC`elem`优化,optimization,ghc,static-analysis,Optimization,Ghc,Static Analysis,考虑LYAH的以下函数: removeNonUppercase st = [ c | c <- st, c `elem` ['A'..'Z']] removeNonUppercase st=[c | c如果您使用GHC 8.0.2使用-O2-ddump siml-dsuppress all编译它,您可以自己看到在elem测试中没有进行优化: lvl_r21d = eftChar 65# 90# removeNonUppercase_go = \ ds_a1Vs -&g
removeNonUppercase st = [ c | c <- st, c `elem` ['A'..'Z']]
removeNonUppercase st=[c | c如果您使用GHC 8.0.2使用-O2-ddump siml-dsuppress all
编译它,您可以自己看到在elem
测试中没有进行优化:
lvl_r21d = eftChar 65# 90#
removeNonUppercase_go =
\ ds_a1Vs ->
case ds_a1Vs of _ {
[] -> [];
: y_a1Vx ys_a1Vy ->
case elem $fEqChar y_a1Vx lvl_r21d of _ {
False -> removeNonUppercase_go ys_a1Vy;
True -> : y_a1Vx (removeNonUppercase_go ys_a1Vy)
}
}
removeNonUppercase = \ st_aqk -> removeNonUppercase_go st_aqk
添加callSet.fromList
有什么烦人的地方?我想适当的优化应该是用一个简单的:-替换查找,至少它会不断折叠,而不是每次都重建列表:-)