(\\) という演算子 *1 でリストの差を取れるのだけど、こいつは最初の出現しか削除してくれない。というのを知らなくて、バグった。
Prelude> import Data.List Prelude Data.List> [1, 2, 2, 3, 3, 1] \\ [1, 2, 3] [2,3,1]
複数引くとその個数だけ消える。
Prelude Data.List> [1, 2, 2, 3, 3, 1] \\ [1, 2, 2, 3] [3,1]
全部消したければ filter
で。
Prelude Data.List> filter (`notElem` nub [1, 2, 2, 3]) [1, 2, 2, 3, 3, 1] []
*1:バックスラッシュなんだけどね・・・