我需要编写一个具有以下类型的函数
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
。我做错了什么?
答案 0 :(得分:1)
我觉得查找“A”的ASCII值有点傻,但到底是什么
您可以简单地导入Data.ByteString.Char8或Data.ByteString.Lazy.Char8,以获得所有相同的功能,但允许在模式中使用字符文字。