Задача
Ваш код не будет компилироваться, потому что список не может быть логическим, поэтому вы не можете иметь его в операторе if. Однако есть такие функции, как all
, any
и null
, которые могут принимать списки и возвращать логические значения.
Решение
Просто используйте функцию Prelude null :: [a] -> Bool
, которая возвращает true, если ваш список пуст. (Также обратите внимание, что @Bergi сказал, что в ограничении типов есть опечатка)
empty_intersection :: (Eq a => [a] -> [a] -> Bool
empty_intersection as bs = null [x | x <- as, x `elem` bs]
Еще лучше
Кроме того, поскольку это ваш второй вопрос об объединениях множеств и пересечениях, обратите внимание, что есть библиотека Data.Set
для работы с упорядоченными множествами, которая имеет гораздо более эффективные функции для пересечения, объединения, членства, разности и т. Д.