-1

言語をブラッシュアップするために Haskell で電卓を実装していますが、ユーザーが入力するまで無限ループに入るようにするには、メインで問題が発生しています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

あなたのdoステートメントで

 compute e 
 evaluate_input

ここでは、両方の関数が同じモナディック型である必要がありますIO(によって宣言されていますevaluate_input :: IO ())。したがって、GHCは、これがeを受け取り、 ( )を返すcompute関数であることを期待できます。それでも、それはまたはのインスタンスであるため、何も見つかりませんでした。StringIO a0== aa0IO a0FloatingReada

計算結果を出力したいと思います(そしてではなくaのインスタンスです)ので、ShowRead

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