Parsing 自定义读取函数的模式匹配

Parsing 自定义读取函数的模式匹配,parsing,haskell,Parsing,Haskell,我正在为模块中的一种数据类型编写一个自定义读取函数。例如,当我读取1+1::数据时,我希望它返回+1。我的数据声明是data data=Plus Int。谢谢你可以使用GHC。你可以使用GHC。这听起来更适合解析器;是一个功能强大的Haskell解析器组合器库,我推荐它。这听起来更适合解析器;是一个功能强大的Haskell解析器组合器库,我推荐。我支持使用解析器的概念。但是,如果您必须使用模式匹配,请执行以下操作: import Data.List data Expr = Plus Int I

我正在为模块中的一种数据类型编写一个自定义读取函数。例如,当我读取1+1::数据时,我希望它返回+1。我的数据声明是data data=Plus Int。谢谢你可以使用GHC。

你可以使用GHC。

这听起来更适合解析器;是一个功能强大的Haskell解析器组合器库,我推荐它。

这听起来更适合解析器;是一个功能强大的Haskell解析器组合器库,我推荐。

我支持使用解析器的概念。但是,如果您必须使用模式匹配,请执行以下操作:

import Data.List

data Expr = Plus Int Int | Minus Int Int deriving Show

test = [ myRead "(1 + 1)", myRead "(2-1)" ]

myRead = match . lexer
  where
    match ["(",a,"+",b,")"] = Plus (read a) (read b)
    match ["(",a,"-",b,")"] = Minus (read a) (read b)
    match garbage           = error $ "Cannot parse " ++ show garbage

lexer = unfoldr next_lexeme
  where 
    next_lexeme ""  = Nothing
    next_lexeme str = Just $ head $ lex str

我想支持使用解析器的概念。但是,如果您必须使用模式匹配,请执行以下操作:

import Data.List

data Expr = Plus Int Int | Minus Int Int deriving Show

test = [ myRead "(1 + 1)", myRead "(2-1)" ]

myRead = match . lexer
  where
    match ["(",a,"+",b,")"] = Plus (read a) (read b)
    match ["(",a,"-",b,")"] = Minus (read a) (read b)
    match garbage           = error $ "Cannot parse " ++ show garbage

lexer = unfoldr next_lexeme
  where 
    next_lexeme ""  = Nothing
    next_lexeme str = Just $ head $ lex str

我不确定这里的问题是什么。您的主题提到了模式匹配,但问题的主体没有提到。您说您正在编写一个自定义读取函数,但没有说在编写时遇到了什么问题。问题是我想对字符串进行一些模式匹配。如果字符串是1+1,那么它将返回+1。如果它是2-1,则返回-21。运算符可以是+-*/。操作数可以是任何整数。但是操作符必须是由空间限定的,并且整个表达式必须有括号限定。我不确定这里的问题是什么。您的主题提到了模式匹配,但问题的主体没有提到。您说您正在编写一个自定义读取函数,但没有说在编写时遇到了什么问题。问题是我想对字符串进行一些模式匹配。如果字符串是1+1,那么它将返回+1。如果它是2-1,则返回-21。运算符可以是+-*/。操作数可以是任何整数。但是,运算符必须由空间限定,并且必须有括号限定整个表达式。