[Haskell] どう書く? org #2841(重複する要素を取り除く)

どう書く? orgの#2841 (http://ja.doukaku.org/comment/2841/) が理解できなかったので、コードを変更して、動かしてみました。

問題は、「配列の中で重複している要素を取り除く」というもので、たとえば入力が[3, 1, 4, 1 5]だったら、出力は[3, 4, 5]となります。元のコードは以下の通りでした。

uniqOnly xs = [x | [x]<-[[z | z<-xs, z==y] | y<-xs]]

これについての解説は、にしおさんのhttp://ja.doukaku.org/comment/2846がすべてだと思いますが、パターンマッチに一致しなかった要素を取り除くという機能を確かめるため、以下のように変更しました(確認用のコードも含んでいます)。

uniqOnly::[Int] -> [[Int]]
uniqOnly xs = [x | x<-[[z | z<-xs, z==y] | y<-xs]]

main = putStr ((showList (uniqOnly [3, 1, 4, 1, 5])) "")

これを動かした結果は、以下の通りでした。

[[3],[1,1],[4],[1,1],[5]]