Parsing 什么';Haskell中一元运算符和二元运算符的解析有什么区别?
我正在学习一些技术来制作一个非常简单的Haskell解析器,用于计算一致性(加法、减法和其他琐碎的操作)。我使用的库是Parsec。虽然我对二进制计算有了一些理解,但如果我尝试制作一元运算符函数,例如否定(~)的函数,对我来说似乎很难。我使用一个代码段来实现乘法解析:Parsing 什么';Haskell中一元运算符和二元运算符的解析有什么区别?,parsing,haskell,parsec,Parsing,Haskell,Parsec,我正在学习一些技术来制作一个非常简单的Haskell解析器,用于计算一致性(加法、减法和其他琐碎的操作)。我使用的库是Parsec。虽然我对二进制计算有了一些理解,但如果我尝试制作一元运算符函数,例如否定(~)的函数,对我来说似乎很难。我使用一个代码段来实现乘法解析: import Text.Parsec hiding(digit) import Data.Functor type Parser a = Parsec String () a digit :: Parser Char digi
import Text.Parsec hiding(digit)
import Data.Functor
type Parser a = Parsec String () a
digit :: Parser Char
digit = oneOf ['0'..'9']
number :: Parser Integer
number = read <$> many1 digit
applyMany :: a -> [a -> a] -> a
applyMany x [] = x
applyMany x (h:t) = applyMany (h x) t
multiplication :: Parser Integer
multiplication = do
lhv <- number
spaces
char '*'
spaces
rhv <- number
return $ lhv * rhv
令人困惑的是,将一元运算与二元运算进行比较,我很难意识到我对一元运算的理解有何错误。希望能帮上忙
factorial
不定义解析器;它计算一个阶乘。类型应该是Integer->Integer
,而不是Parser Integer->Parser Integer
fact :: Parser Integer
fact = do
spaces
char '!'
rhv <- number
spaces
return $ factorial rhv
factorial :: Parser Integer -> Parser Integer
factorial n
| n == 0 || n == 1 = 1
| otherwise = n * factorial (n-1)
Couldn't match type `Integer'
with `ParsecT String () Data.Functor.Identity.Identity Integer'
Expected type: Parser Integer
Actual type: Integer