NumberFloat Double deriving(Show, Eq) intParser :: ...

问题描述 投票:0回答:1
You can't simply cast the value to call it a

; 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,

parsing haskell parsec
1个回答
1
投票

我的一个方法是用下面的方式实现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。

© www.soinside.com 2019 - 2024. All rights reserved.