, поэтому я не могу понять эту проблему:
У меня есть следующий код:
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
один из моих подходов заключался в том, чтобы реализовать intOrFloat следующим образом:
intOrFloat :: Parser Number
intOrFloat =
(do
e<- doubleParser
let result = (e :: Number)
pure result)
<|>
(do
f<- intParser
let result = (f :: Number)
pure result
)
Но я всегда получаю ошибку: не удалось сопоставить ожидаемый тип «Число» с фактическим типом «Целое число»
Не могли бы кто-нибудь объяснить мне, как объединить два парсера для новый парсер с другим типом? Я не понимаю, в чем проблема. Я использую синтаксический анализ c.
Я новичок в Haskell, поэтому будьте осторожны. Спасибо.