-1

我在 Haskell 中实现了一个计算器来复习语言,但是当我希望它进入无限循环直到用户输入时,我在 main 中遇到了障碍q。这是我的主要内容,如果您看到我做错了什么并且生病也发布我的错误,请告诉我

error: No instances for (Floating (IO a0), Read (IO a0))
      arising from a use of `compute'
    Possible fix:
      add instance declarations for (Floating (IO a0), Read (IO a0))
    In a stmt of a 'do' block: compute e
    In the expression:
      do { compute e;
           evaluate_input }
    In an equation for `evaluate_expression':
        evaluate_expression e
          = do { compute e;
                 evaluate_input }
4

1 回答 1

3

在你的做声明中

 compute e 
 evaluate_input

两个函数都需要是相同的单子类型,在这里IO(由 声明evaluate_input :: IO ())。所以 GHC 现在可以预期这compute是一个接受Stringe 并返回IO a0( == a) 的函数。然而,它找不到任何a0所以是orIO a0的实例,它必须是。FloatingReada

我假设您想输出计算结果(并且aShow而不是的实例Read),所以使用

do
 putStrLn . show $ compute e
 evaluate_input
于 2013-02-26T00:27:56.427 回答