Haskell Text.parsercompbinators

Haskell Text.parsercompbinators,haskell,Haskell,我想为Haskell中的正则表达式创建一个解析器组合器。因此,我定义了自己的数据类型,并为此类型创建了一个匹配函数。我最近发现了Text.parsercompbinators。如果使用parseTest函数,则结果类型为IO。那么,如何使用Text.parsercompbinators返回所创建数据的类型呢?下面是我的代码 data Reg = Eps |Sym Char --caracter |Alt Reg Reg --a sau b a|b

我想为Haskell中的正则表达式创建一个解析器组合器。因此,我定义了自己的数据类型,并为此类型创建了一个匹配函数。我最近发现了Text.parsercompbinators。如果使用
parseTest
函数,则结果类型为
IO
。那么,如何使用Text.parsercompbinators返回所创建数据的类型呢?下面是我的代码

data Reg = Eps
        |Sym Char --caracter
        |Alt Reg Reg --a sau b a|b
        |Seq Reg Reg -- secventa ab  sau chiar paranteza
        |Rep (Int, Maybe Int) Reg   --Star repet on or more time
        |Dif Reg    --not
deriving (Show)
--match function
accept :: Reg -> String ->Bool

accept ( parse term "abcd") "abcd"
ERROR - Type error in application
*** Expression     : accept (parse term "abcd") "abcd"
*** Term           : parse term "abcd"
*** Type           : [Char] -> Either ParseError Reg
*** Does not match : Reg
--term is the Parser function where the grammars is defined
term :: Parser Reg
term = buildExpressionParser ops atom where    

正如sdcvvc在评论中指出的那样,
parse
没有应用到足够的参数。

Parsec的表达式解析器为算术表达式(如“1+2”等)意义上的“表达式”和编程语言中的表达式(而非语句)建立一个解析表。不是所有的regexp操作符都是后缀吗?如果是这样,你最好使用另一种技术。实际上,regexp的
alt
当然是中缀。但是,您可能仍然会发现,对于这个问题,使用内置表达式解析器并不像自己这么容易。
parse
需要额外的参数-源文件的名称。如果你不在乎的话,你可以给它
。它将返回
ParseError Reg
,然后您可以在左/右方向进行模式匹配。