Loops 哈斯克尔无限循环

Loops 哈斯克尔无限循环,loops,haskell,Loops,Haskell,我在Haskell中实现了一个计算器来复习这门语言,但是当我想让它进入无限循环直到用户输入q时,我在main中遇到了一个障碍。 这是我的主要信息,如果你看到我做错了什么,请告诉我,我也会发布我的错误 error: No instances for (Floating (IO a0), Read (IO a0)) arising from a use of `compute' Possible fix: add instance declarations for (

我在Haskell中实现了一个计算器来复习这门语言,但是当我想让它进入无限循环直到用户输入q时,我在main中遇到了一个障碍。 这是我的主要信息,如果你看到我做错了什么,请告诉我,我也会发布我的错误

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 }
在你的do声明中

 compute e 
 evaluate_input
这两个函数需要是相同的一元类型,在这里IO由evaluate_input::IO声明。因此GHC现在可以预期compute是一个函数,它接受字符串e并返回IO a0==a。然而,它找不到任何a0,因此ioa0是Floating或Read的实例,而a必须是

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


compute的定义在哪里?在某个点上,您试图读取IO x类型的值,可能是在您没有发布的函数中。好消息是,GHC应该准确地告诉您是哪一行导致了错误:@us2012 compute::Read a,Num a,fractal a,Floating a=>String->aI编辑了上面的代码,并将compute函数放在顶部
do
 putStrLn . show $ compute e
 evaluate_input