2

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

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

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

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

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


[编辑] 杰罗姆的建议奏效了。但更一般地说,是否有任何好的文章展示如何使用字节字符串(和其他更底层的数据)?就像,我怎么知道关于 Word8 的事实?


[编辑-唐斯图尔特的问题]

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

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我的文件顶部确实有。我究竟做错了什么?

4

1 回答 1

1

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

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

于 2012-11-19T12:50:46.263 回答