を使用するParsec 3.1
と、いくつかのタイプの入力を解析できます。
[Char]
とText.Parsec.String
Data.ByteString
とText.Parsec.ByteString
Data.ByteString.Lazy
とText.Parsec.ByteString.Lazy
Data.Text
モジュールには何も表示されません。String
非効率性に苦しむことなく、Unicode コンテンツを解析したいと考えています。したがって、モジュールに基づいて次のモジュールを作成しましたText.Parsec.ByteString
。
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Text.Parsec.Text
( Parser, GenParser
) where
import Text.Parsec.Prim
import qualified Data.Text as T
instance (Monad m) => Stream T.Text m Char where
uncons = return . T.uncons
type Parser = Parsec T.Text ()
type GenParser t st = Parsec T.Text st
- そうするのは理にかなっていますか?
- これは、Parsec API の残りの部分と互換性がありますか?
追加コメント:
{-# LANGUAGE NoMonomorphismRestriction #-}
機能させるには、解析モジュールにプラグマを追加する必要がありました。
構文解析Text
と AST の構築Text
は別物です。pack
また、String
返品前に次のことを行う必要があります。
module TestText where
import Data.Text as T
import Text.Parsec
import Text.Parsec.Prim
import Text.Parsec.Text
input = T.pack "xxxxxxxxxxxxxxyyyyxxxxxxxxxp"
parser = do
x1 <- many1 (char 'x')
y <- many1 (char 'y')
x2 <- many1 (char 'x')
return (T.pack x1, T.pack y, T.pack x2)
test = runParser parser () "test" input