Мне нужно написать функцию следующего типа
replaceSubtrie :: SSTrie -> Data.Word.Word8 -> SSTrie -> SSTrie
replaceSubtrie trie base subtrie = ???
где в зависимости от значения base
поддерево будет вставлено в дерево разными способами. SSTrie — это мой собственный тип данных, и я знаю, как с ним работать, но понятия не имею, как обращаться со значением Word8.
base
— это отдельный «символ» (для определенных значений «символа»), взятый из ByteString. В частности, это результат вызова index
для ByteString — это единственная причина, по которой я объявил его 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
вверху моего файла. Что я делаю неправильно?