関数は問題ないように見えますが、これは次のとおりです。
myfilter [12, 3, []]
...タイプエラーです。リストには同種の型の値が含まれていますが、ここには数値と空のリストの両方を入れています。
あなたが望んでいたのは[[12], [3], []]代わりだったと思います。
GHCiでは:
> myfilter [[12], [3], []]
[[12],[3]]
...これはまさにあなたが望んでいたことのようです。
そして、今後の参考のために、あなたが得たエラーの翻訳キー:
No instance for (Num [a])
これはNum、タイプの のインスタンスを見つけようとして失敗したことを意味します[a]。そのインスタンスが存在するとは想定していないため、問題は別の場所にあります。
arising from the literal `3' at <interactive>:1:13
Num型クラスには、数値リテラルなどを特定の型にfromInteger変換するために使用される が含まれています。3つまり、これが示すことは3、 type の何かが期待されるコンテキストで見つかり、それ[a]を使用しようとしfromIntegerたということです。これにより、上記の「インスタンスなし」エラーが発生しました。
Possible fix: add an instance declaration for (Num [a])
この行はナンセンスです。インスタンスの欠落が原因で発生するエラーはNum、適切なインスタンス宣言を書き忘れたために発生することはほとんどありません。
In the expression: 3
これにより、エラーが見つかった式がわかります。ただし、これは、以前のリテラルの言及からすでにわかっていまし3た。
In the first argument of `myfilter', namely `[12, 3, []]'
エラーのある式の詳細なコンテキスト。これが最終的に問題を特定できる場所です。リストには同種の型、 given 12、3type Num a => a、および[]typeがあるため、[a]それらが get に統合されNum [a] => [a]、エラーが発生します。この場合の修正は、私が上で言ったことで[[12], [3], []]あり、(正しい) typeを持っていますNum a => [[a]]。