2012-05-16 11 views
18

için Char dönüştürmek için nasıl şöyle kelimelere ByteString bölmek istiyorum:Haskell Word8

import qualified Data.ByteString as BS 

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

Ama GHC tek başına Word8 için değişmez bir dönüşümü yapamazsa görünür, bu yüzden var:

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 tür imzasıyla ve Word.Word8 ' ' türünde geçersiz bir tür yapıcıyla hiçbir şey bulamadı. Nasıl düzelteceğimize dair bir fikri olan?

+4

kullanmayın ' Metin için ByteString'! Bunun yerine ['Text'] (http://hackage.haskell.org/package/text) kullanın. –

+0

@DanielWagner Neden olmasın? ByteString'den daha mı hızlı? – Andrew

+5

'Text' unicode-friendly, yani dizeleriniz tüm ülkelerde dizgiler olacak. 'ByteString', ikili ayrıştırma, ham bellek erişimi içindir ve ascii veya latin1'den başka bir şeyle baş edemez. –

cevap

31

Data.ByteString.Char8 modülü, Word8 değerlerini bytestrings olarak Char olarak kullanmanızı sağlar. Daha sonra bkz. C.split. Davlumbazın altındaki testlerle aynıdır, ancak Char-destekli fonksiyonlar, uygun byte/ascii ayrıştırma için sağlanmıştır. durumda

+0

Teşekkürler! Öyleydi. – Andrew

17

Eğer gerçekten Data.ByteString (değil Data.ByteString.Char8) kullanarak, Data.ByteString kendisi Char için Word8 arasında dönüştürmek için ne yapabileceğini gerekir:

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