Выражение длинной цепочки композиций в Haskell

(неважная справочная информация / мотивация)

Я реализовал другую версию кусочка , вдохновленный разочарованием в книге Йесод из используя его.

заголовок карты. группа. 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)

Это определенно делает много дополнительной работы, но это должно быть O (n log n) вместо O (n 2 ) исходного куска. Но это не относится к делу. Проблема в том, он такой длинный ! Это действительно не так сложно, но оно длинное (и я один из тех, кто ненавидит использовать более 80 столбцов или горизонтальные полосы прокрутки в блоках кода StackOverflow).

(вопрос)

Какие способы лучше использовать Haskell для выражения таких длинных цепочек композиции функций, как эта?

11
задан Dan Burton 20 April 2011 в 03:59
поделиться