gpt4 book ai didi

haskell - 在惰性和严格 ByteString 之间轻松切换

转载 作者:行者123 更新时间:2023-12-02 03:24:50 32 4
gpt4 key购买 nike

我需要使用严格和惰性的 ByteStrings,因为这是通过选择库(happstack、base64、sha256、hexpat 等的一些组合)预设的要求。在与“fromStrict”和类似的舞蹈跳舞后,我得到了这个:

import qualified Data.ByteString.Char8  as S
import qualified Data.ByteString.Lazy.Char8 as L

class BString s where
lazy :: s -> L.ByteString
strict :: s -> S.ByteString
pack :: String -> s
text :: T.Text -> s

instance BString L.ByteString where
lazy = id
strict = S.concat . L.toChunks
pack = L.pack
text = L.fromStrict . TE.encodeUtf8

instance BString S.ByteString where
lazy = L.fromStrict
strict = id
pack = S.pack
text = TE.encodeUtf8

因此,当手头的库函数需要惰性字节字符串时,我只放置“lazy $”,或者在严格版本的情况下,放置“strict $”。这很好用,虽然偶尔需要转换,但感觉就像我在这里发明了自行车。

那么,问题是是否有更好(更短、静态类型化、更有效)的替代代码来替代此类代码?是否有图书馆试图统一惰性/严格处理?或者也许我做错了事,这被认为是一种不好的做法(你不应该在懒惰和严格之间转换等等)?

谢谢。

最佳答案

我会在您的应用程序和这些库之间编写一个适配层来执行所有必要的转换。设计适配层,以便您使用首选应用程序数据类型作为这些函数的输入和输出。

一旦您选择了模块,库函数的签名就永远不会改变。也就是说,您知道对 base64 编码的调用将返回哪种字符串(通过您选择的模块)。因此,如果您需要将两个库函数结合在一起,您确切地知道需要进行哪些转换才能将两者结合在一起。

关于haskell - 在惰性和严格 ByteString 之间轻松切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000389/

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