=> Set.Set a -> Set.Set a -> Set.Set a
difference' a Set.null = a
difference' Set.null b = Set.null
difference' (x:xs) ys
| Set.member x ys = difference' xs ys
| otherwise = x : difference' xs ys
какого фига компилятор ругается на Set.null?
а как именно ругается?
Потому что Set.null - это предикат. Чтобы матчить сет, тебе нужен доступ к его конструкторам, а у тебя его нет (они не экспортируются)
нейминг конечно не лучший, соглашусь, новичкам хаскель без хлса лучше не трогать
Эту задачу проще решить через Set.foldr и Set.delete
difference' (x:xs) ys | Set.member x ys = difference' xs ys | otherwise = x : difference' xs ys Вот это не прокатит, потому что оператор : - это конструктор списка, а не сета
бля, и че дделать?
не слушать мультимассо
Хорошие у тебя советы - Internal модули импортировать
Или смотреть на foldr/delete для сета У тебя ж вычитание множеств?
Потому что используя Internal ты можешь себе радостно сделать разбалансированное дерево
difference a b = Set.foldr Set.delete a b
у тебя тут не будет слияния различных частей
а не вернет ли это лишь половину диффа?
А у него, судя по начатому решению, это именно несимметричная разница
у foldr Set. указывать не надо
Это да, но только потому что обобщённая Data.Foldable.foldr реализована для Data.Set через Data.Set.foldr
Обсуждают сегодня