1

こんにちは皆さん、私は比較的 Haskell に詳しくなく、まだ学習中ですが、なぜこれが機能しないのですか?

filterFirst :: (a -> Bool) -> [a] -> [a]
filterFirst p xs = delete (not . p) (filter (not . p)  xs)

端末に次のエラーメッセージが表示されます。

ERROR "FirstLiterate.lhs":58 - Type error in application
*** Expression     : delete (not . p) (filter (not . p) xs)
*** Term           : not . p
*** Type           : a -> Bool
*** Does not match : a
*** Because        : unification would give infinite type

そのため、型が私の定義の型と一致しないことがわかりました。変更する必要がないようにこれを変更するにはどうすればよいですか (a -> Bool)。

4

2 に答える 2

6

の最初の引数は、 typeの関数ではなく、deleteリストの要素 (この場合は type の値) でなければなりません。aa -> Bool

取得した型エラーは、 type があることを示していますnot . pa -> Booldelete関数は type の値を予期していましたa

于 2013-09-27T14:28:35.863 に答える
0

使用できますdeleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]

于 2013-09-27T14:56:13.803 に答える