2012-05-16 7 views
18

에 숯불을 변환하는 방법은과 같이 말을 ByteString를 분할 할 :하스켈 Word8

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 

유형 서명이 Char -> Word8 인 Hoook은 찾을 수 없으며 Word.Word8 ' '은 유효하지 않은 유형 생성자입니다. 그것을 고치는 방법에 대한 아이디어?

+4

사용하지 마십시오' ByteString' 텍스트! 대신에 ['Text'] (http://hackage.haskell.org/package/text)를 사용하십시오. –

+0

@DanielWagner 왜 안 되니? ByteString보다 빠릅니까? – Andrew

+5

'Text '는 유니 코드와 호환되므로 모든 국가에서 문자열이 문자열이됩니다. 'ByteString'은 이진 파싱, 원시 메모리 접근을위한 것이며, ascii 나 latin1 이외의 것을 처리 할 수 ​​없습니다. –

답변

31

Data.ByteString.Char8 모듈에서는 으로 바이트를 Word8 값으로 처리 할 수 ​​있습니다. 바로

import qualified Data.ByteString.Char8 as C 

등이 있습니다. C.split. 이것은 후드 아래에서 동일한 바이트 테스트이지만 편리한 바이트/아스키 파싱을 위해 Char- 오리엔테이션 함수가 제공됩니다. 경우

+0

감사! 그거였다. – Andrew

17

당신 정말 Data.ByteString (안 Data.ByteString.Char8가), 당신은 Data.ByteString 자체가 CHAR하는 Word8 사이의 변환 무엇을 할 수있는 필요

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()