はValue
と呼ばれるタイプを作成することですマッチング期待タイプIは現在、やろうとしています何
eval $ Dif (Sum (Num 3) (Num 6)) (Neg 4)
> 13
私の現在のコードでは、私は各オペレータをthemselveでテストすることができますそれが機能します。
eval (Dif 3 4)
>-1
私は、エラーを取得し、上記のように予想される入力で、ネストされた操作を実行しようとすると問題が発生:
"Couldn't match expected type
Int
with actual typeValue
"
私は私の操作を思って、私は問題を理解しようとしていますInt
を返さなければならず、私のValue
タイプはInt
となるので、次の操作は期待されるタイプでなければなりません。現在の評価関数が実際に何をしているかを調べるためにさまざまな入力をテストしています。
eval (Dif (eval (Sum 3 5)) 4)
>4
期待通りの結果が得られます。私はここで間違って何をしていますか?ここで
なぜあなたは 'Int'を取るものに' Value'を入れようとしていますか? 'Num 1 :: Value'ではなく' Sum'が 'Int'を期待しているので、' Sum(Num 1)(Num 2) 'は動作しません。 – AJFarmar
あなたが得た正しい答えは別として、 'Value'を' Num'のインスタンスにすることで、 '1 :: Value'と書くことができます。 – Alec
私は実際にバリュータイプを取っていたことを完全に見落としました。私は間違った考え方のAJFarmer(私は睡眠不足でそれを責めるだろう)にいた。私の投稿は編集されましたが、私はハスケルに新しいので、私は簡単な間違いに苦しんでいます。チップAlecをありがとう! – Sinsarii