; you have to
construct
data Number = NumberInt Integer
| NumberFloat Double
deriving(Show, Eq)
intParser :: Parser Integer
--code of the parser
doubleParser :: Parser Double
--code of the parser
intOrFloat :: Parser Number
intOrFloat = -- to do
a new value of type
intOrFloat :: Parser Number
intOrFloat =
(do
e<- doubleParser
let result = (e :: Number)
pure result)
<|>
(do
f<- intParser
let result = (f :: Number)
pure result
)
.
The above can simply be written as
In full,
我的一个方法是用下面的方式实现intOrFloat:Number
但最后我总是得到这样的错误:Couldn't match expected type 'Number' with actual type 'Integer' (无法匹配预期的Number和实际的Integer)谁能给我解释一下如何将两个解析器合并成一个新的解析器,并使用另一种类型?我不明白问题出在哪里.我用的是parsec。我是Haskell的新手,所以请温柔点,谢谢你。Number
do
e <- DoubleParser -- e :: Double, assuming success
let result = NumberFloat e -- result :: Number
pure result
NumberFloat <$> DoubleParser
所以我无法理解这个问题:我有以下代码:数据Number = NumberInt Integer。