首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lazy.ByteString与Lazy.ByteString的不同之处

Lazy.ByteString与Lazy.ByteString的不同之处
EN

Stack Overflow用户
提问于 2014-03-04 15:52:20
回答 2查看 246关注 0票数 3

我对现实世界haskell中的代码有点困惑

代码语言:javascript
复制
import qualified Data.ByteString.Lazy.Char8 as L8
import qualified Data.ByteString.Lazy as L

matchHeader :: L.ByteString -> L.ByteString -> Maybe L.ByteString
matchHeader prefix str
    | prefix `L8.isPrefixOf` str
        = Just (L8.dropWhile isSpace (L.drop (L.length prefix) str))
    | otherwise
        = Nothing

在这个函数中,LL8似乎可以互换使用,如果我用L8替换L (特别是对于L.ByteStringL8.ByteString类型),那么编译得很好,我在hackage中看到,它们链接到相同的源,这意味着Data.ByteString.Lazy.Char8.ByteStringData.ByteString.Lazy.ByteString是一样的吗?为什么这里使用L8.isPrefixOf,而不使用L.isPrefixOf

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-04 16:55:12

有趣的是,我使用了所有的ByteStrings,但从未注意到(直到您提到) Char8和Word8版本在内部是相同的数据类型。

不过,有一次,我不得不去看代码.Data/ByteString/Lazy/Char8.hs中的以下一行显示,不仅数据类型相同,而且许多函数都以相同的方式重新导出.

代码语言:javascript
复制
-- Functions transparently exported
import Data.ByteString.Lazy 
        (fromChunks, toChunks, fromStrict, toStrict
        ,empty,null,length,tail,init,append,reverse,transpose,cycle
        ,concat,take,drop,splitAt,intercalate,isPrefixOf,group,inits,tails,copy
        ,hGetContents, hGet, hPut, getContents
        ,hGetNonBlocking, hPutNonBlocking
        ,putStr, hPutStr, interact)

因此,似乎大多数Data.ByteString.(懒惰)?Char8只是Data.ByteString(.Lazy)的方便包装器。这也解释了为什么show总是为Word8 ByteStrings创建字符串输出。

当然,有些东西是不一样的,当你尝试创建一个ByteString时,你可以看到-

代码语言:javascript
复制
B.pack "abcd"  -- This fails
B.pack [65, 66, 67, 68] -- output is "ABCD"
B8.pack "abcd"  -- This works
票数 4
EN

Stack Overflow用户

发布于 2014-03-04 16:36:47

根据文档Lazy.ByteStringLazy.Char.ByteString都是Word8向量的空间高效表示,支持许多有效的操作。因此,在内部,它们似乎是相同的,您可以交替使用它们。

但是,Lazy.Char.ByteString还具有以下特性:

  • 所有字符将被截断为8位(所以要小心!)
  • 字节字符串的Char8接口为ByteString类型提供了一个IsString实例,使您能够使用字符串文本,并将它们隐式打包到ByteStrings中。(您应该为此启用OverloadedStrings扩展)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22176647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档