Мне очень нравится какое-то имя, основанное на термине "разрыв", как предполагает Адамс. Есть довольно много возможных вариантов функции. Вот что я ожидал (основываясь на именах, используемых в библиотеках F #).
Функция с именем просто breakBefore
будет принимать элемент, перед которым она должна сломаться:
breakBefore :: Eq a => a -> [a] -> [[a]]
Функция с суффиксом With
будет принимать какую-то функцию, которая прямо указывает, когда нужно прерваться. В случае взлома это функция a -> Bool
, которую вы хотели:
breakBeforeWith :: (a -> Bool) -> [a] -> [[a]]
Можно также представить, что функция с суффиксом By
будет принимать селектор ключа и прерываться при изменении ключа (что немного похоже на group by
, но вы можете иметь несколько групп с одинаковым ключ):
breakBeforeBy :: Eq k => (a -> k) -> [a] -> [[a]]
Я признаю, что имена становятся немного длиннее - и, возможно, единственная действительно полезная функция - это та, которую вы хотели. Однако библиотеки F #, похоже, используют этот шаблон довольно последовательно (например, sort
, sortBy
выбирают ключевой селектор и sortWith
выбирают функцию сравнения).
Возможно, возможно иметь эти три варианта для большего количества функций обработки списка (и неплохо было бы иметь некоторый согласованный шаблон именования для этих трех типов).