Извините, что выдал ответ, но вот он, прямо из источника Data.List
delete :: (Eq a) => a -> [a] -> [a]
delete = deleteBy (==)
deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
deleteBy _ _ [] = []
deleteBy eq x (y:ys) = if x `eq` y then ys else y : deleteBy eq x ys
Обычно я бы описал это здесь, но если вы понимаете базовую рекурсию, если операторы, сопоставление с образцом, оператор :
и частичное применение / каррирование, то это должно быть само за себя. Не стесняйтесь спрашивать, является ли какой-либо из них чуждым вам.