gpt4 book ai didi

haskell - 为什么 ghc 会生成这么多看起来无用的嵌套 case 表达式?

转载 作者:行者123 更新时间:2023-12-03 15:27:21 26 4
gpt4 key购买 nike

我有一些 Haskell 代码

indLoc index way = do
Store p <- ask
return $ plusPtr p localAddr
where localAddr = (stHeader + stIndices + index + stIndices * way) * blockSize
--snip...
(Just way, _) -> do
liftIO $ pokeElemOff loc way a
indLoc index way

这产生了一些看起来很奇怪的核心:
  case GHC.Prim.writeInt64OffAddr#
@ GHC.Prim.RealWorld a4_s4UV i_s4UW x_s4UX new_s_s4UY
of s2_s4V0 { __DEFAULT ->
let {
sat_s528 :: GHC.Ptr.Ptr b_a1UV
[LclId]
sat_s528 =
case r_s4Us `cast` ... of _ { GHC.Ptr.Ptr addr_s4Vb ->
case index_s4Um of _ { GHC.Types.I# y_s4Vc ->
case ds1_s4Ub of _ { (blk1_s529, offs_s4V8) ->
case offs_s4V8 of _ { GHC.Types.I# d_s4Vk ->
case GHC.Prim.*# 2 i_s4UW of sat_s4Vf { __DEFAULT ->
case GHC.Prim.+# 3 y_s4Vc of sat_s527 { __DEFAULT ->
case GHC.Prim.+# sat_s527 sat_s4Vf of sat_s526 { __DEFAULT ->
case GHC.Prim.*# sat_s526 4096 of sat_s4Vi { __DEFAULT ->
case GHC.Prim.plusAddr# addr_s4Vb sat_s4Vi
of sat_s525 { __DEFAULT ->
case GHC.Prim.plusAddr# sat_s525 d_s4Vk of sat_s524 { __DEFAULT ->
GHC.Ptr.Ptr @ b_a1UV sat_s524
}
}
}
}
}
}
}
}
}
} } in
(# s2_s4V0, sat_s528 #)
}

case 表达式看起来像是无操作。他们在那里做什么?严格?

最佳答案

case表达力评估。使用 let将改为建立闭包。请注意,GHC Core 在 case 的语义上与常规 Haskell 不同。 .

关于haskell - 为什么 ghc 会生成这么多看起来无用的嵌套 case 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18192184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com