ファーストを使用することができ、型シグネチャは、不正な形式です。
deleteAllInstances :: (a, [l]) => a -> [l] -> [l]
型シグネチャは、フォームConstraints
が(Ord a, Show a)
ような型クラスを含む
name :: (Constraints) => type
を有しています。この場合、関数は(==)
を使用するため、Eq a
という形式の制約が必要です。
関数定義は型部分と一致せず、引数としてペアをとるように定義しましたが、型シグネチャはそうではありません(定義は一掃されていない、型はカルトです)。
deleteAllInstances (a, []) = []
deleteAllInstances (i, (x:xs))
| i == x = tail
| otherwise = x ++ tail
where tail = deleteAllInstances i xs
は、あなたがリストの先頭に要素を接着する(++)
を使用しますが、(++)
は二つのリストを連結して、あなたはここで(:)
を必要としています。
関数を定義する最も簡単な方法は、filter
deleteAllInstances :: Eq a => a -> [a] -> [a]
deleteAllInstances a xs = filter (/= a) xs
を使用することですが、あなたは、明示的な再帰を自分で行いたい場合は、
deleteAllInstances :: Eq a => a -> [a] -> [a]
deleteAllInstances a (x:xs)
| a == x = rest
| otherwise = x : rest
where
rest = deleteAllInstances a xs
deleteAllInstances _ _ = []
どのエラーが発生しますか? –