Data.Function
| Авторские права | Nils Anders Danielsson 2006 Alexander Berntsen 2014 |
|---|---|
| Лицензия | BSD-стиль (см. файл LICENSE в дистрибутиве) |
| Поддержка | libraries@haskell.org |
| Стабильность | экспериментальная |
| Переносимость | переносимый |
| Безопасный Haskell | Надёжный |
| Язык | Haskell2010 |
Содержание
- Prelude реэкспорт
- Другие комбинаторы
Описание
Простые комбинаторы, работающие только с функциями.
Prelude реэкспорт
id :: a -> a Исходный код
Функция тождества.
id x = x
const :: a -> b -> a Исходный код
const x - это унарная функция, которая вычисляется до x для всех входных значений.
>>> const 42 "hello" 42
>>> map (const 42) [0..3] [42,42,42,42]
(.) :: (b -> c) -> (a -> b) -> a -> c infixr 9 Исходный код
Композиция функций.
flip :: (a -> b -> c) -> b -> a -> c Исходный код
flip f принимает свои два (первых) аргумента в обратном порядке от f.
>>> flip (++) "hello" "world" "worldhello"
($) :: forall r a (b :: TYPE r). (a -> b) -> a -> b infixr 0 Исходный код
Оператор применения. Этот оператор избыточен, так как обычное применение (f x) означает то же самое, что и (f $ x). Однако $ имеет низкий, правоассоциативный приоритет связывания, поэтому иногда позволяет опустить скобки; например:
f $ g $ h x = f (g (h x))
Он также полезен в ситуациях с высшим порядком, таких как map ($ 0) xs, или zipWith ($) fs xs.
Обратите внимание, что ($) является полиморфным по ленивости в своём типе результата, так что foo $ True где foo :: Bool -> Int# является корректным.
Другие комбинаторы
(&) :: a -> (a -> b) -> b infixl 1 Исходный код
& — это обратный оператор применения. Это обеспечивает удобство обозначений. Его приоритет на один выше, чем у оператора прямого применения $, что позволяет & быть вложенным в $.
>>> 5 & (+1) & show "6"
С момента: base-4.8.0.0
fix :: (a -> a) -> a Исходный код
fix f — это наименьшая неподвижная точка функции f, т.е. наименьшее определённое значение x такое, что f x = x.
Например, функцию факториала можно записать с помощью прямой рекурсии как
>>> let fac n = if n <= 1 then 1 else n * fac (n-1) in fac 5 120
Это использует тот факт, что let Haskell's introduces рекурсивные привязки. Мы можем переписать это определение с помощью fix,
>>> fix (\rec n -> if n <= 1 then 1 else n * rec (n-1)) 5 120
Вместо вызова рекурсивной функции, мы вводим фиктивный параметр rec; когда он используется в fix, этот параметр ссылается на аргумент fix , таким образом, рекурсия вводится повторно.
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c infixl 0 Исходный код
on b u x y выполняет бинарную функцию b на результатах применения унарной функции u к двум аргументам x и y. С другой стороны, он преобразует два входных значения и комбинирует выходы.
((+) `on` f) x y = f x + f y
Типичное использование: sortBy (compare `on` fst).
Алгебраические свойства:
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/Data-Function.html