gpt4 book ai didi

haskell - 遍历后如何保持Data.IntMap.Strict严格?

转载 作者:行者123 更新时间:2023-12-02 12:38:11 26 4
gpt4 key购买 nike

Data.IntMap.Strict docs say :

Be aware that the Functor, Traversable and Data instances are the same as for the Data.IntMap.Lazy module, so if they are used on strict maps, the resulting maps will be lazy.

我使用 IntMap.traverseWithKey (Functor f => Applicative f),因为我想要一个 mapWithKey 和一个 maprWithKey 不存在。相反,我在严格的映射上使用 Backwards 仿函数。应用使用后如何保持 map 严格?

最佳答案

您可以使用 mapAccumWithKeymapAccumRWithKey,而不使用 Accumulator 参数。优化后,它很可能与 mapWithKey 函数一样快。

编辑:如果您正在进行单子(monad)遍历,并且希望使可能产生的 IntMap-s 严格,那么您可以通过在单子(monad)操作中返回严格值来实现这一点。

import Data.IntMap.Strict
import Control.Applicative

m :: IntMap Int
m = fromList $ zip [0..] (replicate 10 0)

traverse (\n -> Just (n + 100)) m 返回一个包含 n + 100 个 thunk 的 Just m 映射。 traverse (\n -> Just $!n + 100) m 返回一个包含已计算的 Int-s 的映射。同样,使用 return $! x 在其他 monad 中以获得严格的结果。

关于haskell - 遍历后如何保持Data.IntMap.Strict严格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397711/

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