Haskell Как преобразовать Char в Word8
Я хочу разделить ByteString
на такие слова:
import qualified Data.ByteString as BS
main = do
input <- BS.getLine
let xs = BS.split ' ' input
Но похоже, что GHC не может преобразовать символьный литерал в Word8
сам по себе, поэтому я получил:
Couldn't match expected type `GHC.Word.Word8'
with actual type `Char'
In the first argument of `BS.split', namely ' '
In the expression: BS.split ' ' input
Hoogle не находит ничего с сигнатурой типа Char -> Word8
и Word.Word8 ' '
является недопустимым конструктором типа. Любые идеи о том, как исправить это?
Ответы
Ответ 1
Модуль Data.ByteString.Char8 позволяет обрабатывать значения Word8
в байтах как Char
. Просто
import qualified Data.ByteString.Char8 as C
то см., например, C.split. Это то же самое, что и под капотом, но для упорядоченного анализа байта /ascii предусмотрены Char
-ориентированные функции.
Ответ 2
Если вам действительно нужен Data.ByteString(не Data.ByteString.Char8), вы можете сделать то, что сам Data.ByteString делает для преобразования между Word8 в Char:
import qualified Data.ByteString as BS
import qualified Data.ByteString.Internal as BS (c2w, w2c)
main = do
input <- BS.getLine
let xs = BS.split (BS.c2w ' ') input
return ()
Ответ 3
Люди ищут простой Char → Word8
с базовой библиотекой:
import Data.Word
charToWord8 :: Char -> Word8
charToWord8 = toEnum . fromEnum