Лучший ответ: не надо. В этом конкретном примере единственным изменением будет то, что ваш код будет менее читабельным. Ваш оригинальный заостренный вариант прекрасно подойдет.
В некоторых случаях лучше избегать стиля без очков. Это один из них, потому что ваш аргумент не подвергается линейному потоку данных. Он скорее используется для создания потока данных для чего-то другого. Пример:
-- Bad: Pointy linear data flow description.
chunksOf :: Int -> [a] -> [[a]]
chunksOf n xs =
takeWhile (not . null) (map (take n) (iterate (drop n) xs))
-- Good: Pointfree linear data flow description.
chunksOf :: Int -> [a] -> [[a]]
chunksOf n =
takeWhile (not . null) . map (take n) . iterate (drop n)
-- Bad: Now exaggerating with pointfree style.
chunksOf :: Int -> [a] -> [[a]]
chunksOf =
liftA2 ((.) (.) . (.) $ takeWhile (not . null))
(map . take)
(iterate . drop)