2012-05-16 8 views
18

voglio dividere ByteString alle parole in questo modo:Haskell Come convertire char a Word8

import qualified Data.ByteString as BS 

main = do 
    input <- BS.getLine 
    let xs = BS.split ' ' input 

Ma sembra che GHC non può convertire un carattere letterale per Word8 da solo, così ho preso:

Hoogle non trova nulla con la firma del tipo Char -> Word8 e Word.Word8 ' ' non è un costruttore di tipi. Qualche idea su come aggiustarlo?

+4

Non usare ' ByteString' per il testo! Usa invece ['Text'] (http://hackage.haskell.org/package/text). –

+0

@DanielWagner Perché no? È più veloce di 'ByteString'? – Andrew

+5

'Text' è unicode-friendly, quindi le stringhe saranno stringhe in tutti i paesi. 'ByteString' è per l'analisi binaria, l'accesso alla memoria grezza e non può gestire nient'altro che ASCII o Latino1. –

risposta

31

Il modulo Data.ByteString.Char8 consente di trattare i valori Word8 nei bytestrings come Char. Solo

import qualified Data.ByteString.Char8 as C 

quindi fare riferimento ad es. C.split. È la stessa cosa sotto il cofano, ma le funzioni con orientamento Char sono fornite per l'analisi di byte/ascii.

+0

Grazie! Era così. – Andrew

17

Nel caso in cui davvero bisogno Data.ByteString (non Data.ByteString.Char8), si poteva fare quello Data.ByteString si fa per la conversione tra Word8 a 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()