Optimization GHC`elem`优化

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

考虑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 ->
    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

添加call
Set.fromList
有什么烦人的地方?我想适当的优化应该是用一个简单的:-替换查找,至少它会不断折叠,而不是每次都重建列表:-)