2013-02-25 163 views
-1

我在Haskell中实现了一个计算器来刷新语言,但是当我想让它进入一个无限循环时,我在主要中遇到了一个障碍,直到用户输入q。 继承人我主要让我知道,如果你看到我在做什么错误和虐待还张贴我的错误Haskell无限循环

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 } 
+0

哪里'compute'的定义是什么? – us2012 2013-02-26 00:02:02

+1

在某些时候,您正尝试'读取'IO x类型的值,可能在您没有打算发布的函数中。好消息是,GHC应该正确地告诉你*哪一行导致错误:) – 2013-02-26 00:02:51

+0

@ us2012 compute ::(读取a,数字a,小数a,浮点数a)=>字符串 - > a – CodeNewbie 2013-02-26 00:09:32

回答

3

在你做陈述

compute e 
evaluate_input 

的作用都需要相同的一元在这里输入IO(由evaluate_input :: IO()声明)。因此GHC现在可以预计compute是一个函数,它接受Stringe并返回IO a0== a)。然而,它找不到任何a0,因此IO a0FloatingRead的实例,其中a必须是。

我会假设你想输出的计算结果(和aShow而非Read一个实例),所以使用

do 
putStrLn . show $ compute e 
evaluate_input 
+0

谢谢sooooo多!!!!! – CodeNewbie 2013-02-26 00:48:20