(неважная справочная информация / мотивация)
Я реализовал другую версию кусочка
, вдохновленный разочарованием в книге Йесод из используя его.
заголовок карты. группа. 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 для выражения таких длинных цепочек композиции функций, как эта?