2016-06-18 6 views
-3

を読んで、私はこのインスタンスは、私が</p> <pre><code>data GameAction = GameAction (Int, Int) deriving (Eq) </code></pre> <p>データ型の読み取りインスタンスを実装する必要がHaskellの

instance Read GameAction where 
    readProc (x:xs:_) = setGA (read x) (read xs) 

をしました。しかし、私はエラー

`readProc' is not a (visible) method of class `Read' 

任意のアイデアを得ます?

+0

をたどるよう

私は私の問題を解決するだろうか? – melpomene

+0

それを修正する方法、私はこのインスタンスを正しく実装していません –

+0

1.エラーメッセージを読んでください。 2.エラーメッセージを理解する。 3.エラーを修正します。 – melpomene

答えて

3

まず、次回の質問にもっと役立つ情報と文脈を含めるようにしてください。

第2に、問題が単にタイプミス(readProc)であるかのように見えますが、Readタイプの実際のreadPrecメソッドに対してです。

data GameAction = GameAction (Int, Int) deriving (Show,Eq,Read) 

そして、GHCiの中:

ghci> let x = GameAction (5,6) 
ghci> (read . show) x == id x 
True 

だから、そこに行くことは容易に導くことができるよう

第三に、Readを実装することは、ここでneccesaryではありません。

さらに重要なのは、なぜ手でReadインスタンスを実装しようとしているのですか? ShowおよびReadは、Stringとの間でデータ型をエンコード/デコードするためのもので、デバッグ目的でのみ使用してください。自動的に派生したReadインスタンスが提供するものよりも専門的なものが必要な場合は、おそらくReadよりも何かを探しているでしょう。 UTF-8文字列をデータ型にパースする場合は、textライブラリとattoparsecライブラリを組み合わせてください。

+0

ありがとう、それは私がスタックオーバフローで新しいです、私は問題の詳細を含めることを試みる次回のためです。 私は読書を実装する必要があります。なぜなら、機能プログラミング(私たちはゲームをすることになっています。 –

2

ありがとうございます。エラーについては不明何

instance Read GameAction where 
readsPrec _ (x:y:rest) = let board = read [x] :: Int; 
         cel = read [y] :: Int; 
         in 
         if all isDigit [x,y] then 
         [(setGA board cel, rest)] 
         else [] 
readsPrec _ _ = [] 
関連する問題