2010-01-19 31 views
6

Tôi đã quản lý để sử dụng Parsec để phân tích cú pháp một Chuỗi, nhưng không thể quản lý để làm giống với ByteString.Sử dụng Parsec của Haskell để phân tích cú pháp ByteString

Tôi làm cách nào để Parsec hoạt động với ByteStrings mà không chuyển đổi chúng thành chuỗi?

Tôi có cảm giác điều này không khó thực hiện. Liệu tôi có sai? (Tôi mới dùng Haskell. ^^)

Cảm ơn!

+2

Dựa trên [các câu hỏi khác] [1] bạn hỏi, bạn nên tìm hiểu để đọc tài liệu của thư viện bạn đang sử dụng. Nó có sẵn trên Hackage. [1]: http://stackoverflow.com/questions/2086842/using-haskell-to-output-a-utf-8-encoded-bytestring –

Trả lời

8

Chỉ cần nhập loại Parser từ Text.Parsec.ByteString hoặc Text.Parsec.ByteString.Lazy, thay vì từ Text.Parsec.String.

+0

Số là gì trong Text.Parsec.ByteString.Lazy (http : //hackage.haskell.org/packages/archive/parsec/3.0.0/doc/html/Text-Parsec-ByteString-Lazy.html)? – HHC

+0

xem (http://stackoverflow.com/questions/15455084/matching-bytestrings-in-parsec?rq=1)[http://stackoverflow.com/questions/15455084/matching-bytestrings-in-parsec?rq= 1] cho nơi để đi từ đây – Karl

2

câu trả lời thực sự phụ thuộc vào phiên bản Parsec bạn đang sử dụng. Nếu bạn đang sử dụng phiên bản 3.0 hoặc mới hơn thì có. Đối với phiên bản 2.x.x tôi không nghĩ rằng bạn có thể.

http://hackage.haskell.org/packages/archive/parsec/3.0.1/doc/html/Text-Parsec-ByteString.html

Cheers

chỉnh sửa: Các Parsec rằng STH đề nghị (Text.Parsec.ByteString) thực sự là phiên bản 3.0 phiên bản trước 2.x.x tọa lạc tại Text.ParserCombinators.Parsec.

+0

Ồ, sau đó tôi dường như hiện đang thiếu phiên bản mới nhất và đã sử dụng phiên bản cũ hơn. Tôi sẽ nâng cấp. Cảm ơn cả hai người! –

0
import Text.Parsec.ByteString() 

sẽ cung cấp cho bạn các ví dụ

forall m. Stream ByteString m Char 

vì thế nếu bạn sử dụng, thay vì Parser a:

p :: Stream s m Char => ParsecT s u m a 
Các vấn đề liên quan