(重要でない背景情報 / 動機)
私は、イェソドの本の使用を思いとどまらせnub
たことに触発されて、別のバージョンの を実装していました。
map head . group . sort
への呼び出しよりも効率的ですnub
。ただし、私たちの場合、順序は重要です...
そこで、順序が重要でないバージョンに似た「より良い」ナブを書き始めました。そして、私はこれで終わった:
mynub = unsort . map head . groupBy (\x y -> fst x == fst y) . sortBy (comparing fst) . rememberPosition
rememberPosition = flip zip [0..]
unsort = map fst . sortBy (comparing snd)
これは確かに多くの余分な作業を行いますが、元の nub の O(n 2 )ではなく O(n log n) にする必要があります。しかし、それは論外です。問題は、それがとても長いことです!それほど複雑ではありませんが、長いです (私は 80 列よりも幅が広い、または StackOverflow コード ブロックの水平スクロールバーが嫌いな人の 1 人です)。
(質問)
このような関数構成の長いチェーンを表現するためのHaskellでのより良い方法は何ですか?