0

我需要使用 Parsec 从整数函数中获取 Int 类型。我现在的代码是

aTerm =  parens aExpression
     <|> liftM GetV identifier
     <|> liftM N integer

其中 N 的类型是

N    :: Num a => a -> Expr a

我得到的错误是

Shane.hs:227:18:
    Couldn't match expected type `Int' with actual type `Integer'
    Expected type: Text.Parsec.Prim.ParsecT String u0 Identity Int
      Actual type: Text.Parsec.Prim.ParsecT String u0 Identity Integer
    In the second argument of `liftM', namely `integer'
    In the second argument of `(<|>)', namely `liftM N integer'
Failed, modules loaded: none.

是否可以在这里提取 Int 类型?以某种方式使用 fromInteger?从 Int 更改为 Integer 不是一种选择。

4

1 回答 1

3

这应该有效。

aTerm =  parens aExpression
     <|> liftM GetV identifier
     <|> liftM (N . fromInteger) integer
于 2012-11-25T17:23:39.383 回答