Подтвердить что ты не робот

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 ' ' является недопустимым конструктором типа. Любые идеи о том, как исправить это?

4b9b3361

Ответ 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