gpt4 book ai didi

haskell - Data.ByteString.Lazy 追加是惰性的吗?

转载 作者:行者123 更新时间:2023-12-02 15:18:29 25 4
gpt4 key购买 nike

假设我有:

import qualified Data.ByteString.Lazy as L
bs1 :: L.ByteString
bs2 :: L.ByteString

L.append bs1 bs2 是否也很懒,因为这不会导致我立即消耗所有 bs1?与 L.concat 类似,与 L.length 不同,我理解它会导致它消耗整个字节串,因为它需要计算所有字节。

最佳答案

确定函数的惰性程度的一个简单方法是向其传递部分定义的值。例如,让我们定义一个由一个 block 组成的惰性字节串,后跟一个未定义的尾部。

*Main> let bs1 = L.fromChunks $ B.pack [102, 111, 111] : undefined
*Main> bs1
Chunk "foo" *** Exception: Prelude.undefined

如您所见,尝试打印它会在第一个 block 之后引发异常。现在,让我们定义另一个惰性 ByteString 并尝试附加它们。

*Main> let bs2 = L.pack [98, 97, 114]
*Main> L.append bs1 bs2
Chunk "foo" *** Exception: Prelude.undefined

L.append 能够生成所得惰性 ByteString 的第一个 block 。这意味着它只需查看 bs1 的第一个 block 即可生成结果的第一个 block ,即它与您期望的一样惰性。

关于haskell - Data.ByteString.Lazy 追加是惰性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8097884/

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