Мне нравится ответ @ bzn, но я хотел бы привести несколько примеров, когда полезные функции не используются.
Некоторые библиотеки интенсивно используют кортежи данных. Одним из примеров является Gtk2hs, который использует кортеж (Int, Int)
для размеров окна и определенных координат. Поэтому, когда я работаю с gtk2hs, я часто пишу функции в неиспользуемой форме, поэтому мне не нужно вручную распаковывать кортеж.
Также помните, что функция может возвращать только один результат. Чтобы вернуть более одного значения, все результаты должны быть упакованы в кортеж. uncurry
тогда полезно для создания композиций из этих функций. Вот упрощенный пример из проекта, над которым я работаю:
addIndex :: MyData -> (Int, MyData)
normalize' :: Int -> MyData -> [(Int, MyData)]
normalize :: [MyData] -> [(Int, MyData)]
normalize = concatMap (uncurry normalize' . addIndex)
Я обычно предпочитаю писать функции в форме карри, но здесь мне понадобилась нетипичная версия normalize'
, чтобы сочинять с addIndex
.
Это две ситуации, когда я нахожу полезную функцию без ускорения. К счастью, эти две формы легко конвертировать.