リストを取り、存在する場合は一意の要素を返し、存在しない場合は [] を返す関数が必要です。一意の要素が多数存在する場合は、最初の要素を返す必要があります (他の要素を見つけるために時間を無駄にすることはありません)。さらに、リスト内のすべての要素が (小さくて既知の) セット A に由来することを知っています。たとえば、この関数は Ints の仕事をします:
unique :: Ord a => [a] -> [a]
unique li = first $ filter ((==1).length) ((group.sort) li)
where first [] = []
first (x:xs) = x
ghci> unique [3,5,6,8,3,9,3,5,6,9,3,5,6,9,1,5,6,8,9,5,6,8,9]
ghci> [1]
ただし、これは線形時間で実行できますが (A が小さいため)、並べ替え (n log n) を伴うため、十分ではありません。さらに、リスト要素のタイプが Ord である必要がありますが、必要なのは式 (1) だけです。比較の量ができるだけ少ない場合もいいでしょう (つまり、リストをトラバースして要素 el に 2 回遭遇した場合、後続の要素が el と等しいかどうかをテストしません)。
これが、たとえば次の理由です。リスト内の一意の要素を数えても問題は解決しません。すべての回答には、リスト全体をソートまたはトラバースして、すべての要素の数を見つけることが含まれます。
問題は、Haskell で正しく効率的に行う方法です。