gpt4 book ai didi

haskell - 使用 Parsec 和 Data.Text

转载 作者:行者123 更新时间:2023-12-03 08:41:10 25 4
gpt4 key购买 nike

使用 Parsec 3.1 ,可以解析几种类型的输入:

  • [Char]Text.Parsec.String
  • Data.ByteStringText.Parsec.ByteString
  • Data.ByteString.LazyText.Parsec.ByteString.Lazy

  • 我没有看到 Data.Text 的任何内容模块。我想解析 Unicode 内容而不受 String 的影响效率低下。所以我基于 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 #-}我的解析模块中的 pragma 以使其工作。

    解析 Text是一回事,使用 Text 构建 AST是另一回事。我还需要 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

    最佳答案

    由于 Parsec 3.1.2 支持 Data.Text 是内置的!
    http://hackage.haskell.org/package/parsec-3.1.2

    如果您坚持使用旧版本,其他答案中的代码片段也很有帮助。

    关于haskell - 使用 Parsec 和 Data.Text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064532/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com