4

私は、Control.Monad.Writer を含む Haskell コードを 1 日中コンパイルしようとしました。Learn You a Haskellからコンパイルされないコード例を次に示します。

import Control.Monad.Writer  

gcd' :: Int -> Int -> Writer [String] Int  
gcd' a b  
    | b == 0 = do  
        tell ["Finished with " ++ show a]  
        return a  
    | otherwise = do  
        tell [show a ++ " mod " ++ show b ++ " = " ++ show (a `mod` b)]  
        gcd' b (a `mod` b)

次のエラーが表示されます。

No instance for (Show (Writer [String] Int))
      arising from a use of `print'
    Possible fix:
      add an instance declaration for (Show (Writer [String] Int))
    In a stmt of an interactive GHCi command: print it

今日先生が書いた Control.Monad.Writer を含むコードをコンパイルしようとしましたが、何も機能しません。

Ubuntu 12.04、gedit、および GHC 7.4.1 を使用しています。

Learn You a Haskellの Writer モナド プログラムはすべてコンパイルに失敗しました。

4

1 に答える 1

8

あなたはどうやら次のようなものを入力しました

ghci> gcd' 12345 6789

ghci プロンプトで。したがって、ghci に type の値を出力するように要求しましたが、型Writer [String] IntShowインスタンスWriterがないため、ghci はそれを出力できません。runWriterまたは同様の機能を適用する必要があります。

ghci> runWriter $ gcd' 12345 6789

動作するはずです。

于 2012-06-26T22:21:11.887 に答える