ファイルの違いを総当たりで確認

ファイルのリストが手元にあって、これらがぜんぶ同じことを確かめたい、ということがあって。いま。
リストの中の任意のふたつを取って組み合わせをつくるってことか。ううーん…

foo f (x:xs) = map (f x) xs ++ foo f xs
foo _ _ = []

main = do
  cs <- getContents
  putStr . unlines . foo f . lines $ cs
  where f x y = show x ++ " " ++ show y

とりあえずこんなコードを書いて。

これをシェルスクリプトでつないで…

$ find -name "*.txt" |runghc /tmp/foo.hs |while read l
> do sh -c "diff -u $l"; done

うん。動いた。

しかし総当たりで調べる必要はなかった。ファイルの等価性には推移律が成り立つから前から順にふたつずつ等価チェックしていけばいいんだ。ちぇー
(つまり foo の一つ目の定義は foo f (x:y:zs) = f x y ++ foo f (y:zs) でよい)