我如何使用Haskell中的ByteString的单个元素

时间:2012-11-19 05:04:22

标签: haskell bytestring

我需要编写一个具有以下类型的函数

replaceSubtrie :: SSTrie -> Data.Word.Word8 -> SSTrie -> SSTrie
replaceSubtrie trie base subtrie = ???

根据base的值,subtrie将以不同的方式插入到trie中。 SSTrie是我自己的数据类型,我知道如何使用它,但我不知道如何处理Word8值。

base是从ByteString中获取的单个“字符”(对于某些“字符”值)。具体来说,它是在ByteString上调用index的结果 - 这是我将其声明为Word8的唯一原因。

我无法进行模式匹配,因为没有可用的Word8构造函数。我无法让警卫工作,因为我不知道如何构建一个Word8常量来比较它。


[编辑]杰罗姆的建议有效。但更一般地说,是否有任何好的文章显示如何使用Bytestrings(和其他更低级别的数据)?就像,我怎么能知道关于Word8的事实?


[编辑 - Don Stewart的问题]

现在我已经使用了像这样的代码

replaceSubtrie trie 0x41 subtrie = trie{ a=subtrie }

当我将其更改为:

replaceSubtrie trie 'A' subtrie = trie{ a=subtrie }

我收到错误:

Trie.hs:40:21:
Couldn't match expected type `Word8' with actual type `Char'
In the pattern: 'A'
In an equation for `replaceSubtrie':
    replaceSubtrie trie 'A' subtrie = trie {a = subtrie}

我的文件顶部有import qualified Data.ByteString.Char8 as C。我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

我觉得查找“A”的ASCII值有点傻,但到底是什么

您可以简单地导入Data.ByteString.Char8或Data.ByteString.Lazy.Char8,以获得所有相同的功能,但允许在模式中使用字符文字。