2012-05-16 4 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 

Hoogle Char -> Word8 और Word.Word8 ' ' के प्रकार के हस्ताक्षर के साथ कुछ भी नहीं मिल रहा है अमान्य प्रकार निर्माता है। यह कैसे तय करें पर कोई विचार है?

+4

का प्रयोग न करें ' पाठ के लिए बाइटस्ट्रिंग'! इसके बजाए ['text'] (http://hackage.haskell.org/package/text) का उपयोग करें। –

+0

@DanielWagner क्यों नहीं? क्या यह 'बाइटस्ट्रिंग' से तेज है? – Andrew

+5

'टेक्स्ट' यूनिकोड-अनुकूल है, इसलिए आपके तार सभी देशों में तार होंगे। 'बाइटस्ट्रिंग' बाइनरी पार्सिंग, कच्ची मेमोरी एक्सेस के लिए है, और एएससीआई या लैटिन 1 के अलावा कुछ भी संभाल नहीं सकता है। –

उत्तर

31

Data.ByteString.Char8 मॉड्यूल आपको Word8 मानों को Char के रूप में बाइटस्टर्स में इलाज करने की अनुमति देता है। बस

import qualified Data.ByteString.Char8 as C 

फिर उदा। C.split। यह हुड के नीचे वही है, लेकिन Char - सुविधाजनक बाइट/एएससीआई पार्सिंग के लिए केंद्रित कार्य प्रदान किए जाते हैं।

+0

धन्यवाद! वह यह था। – Andrew

17

मामले में आप वास्तव में जरूरत Data.ByteString (नहीं Data.ByteString.Char8), तुम कर सकते हो Data.ByteString ही 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()