Data.Enum
| Авторские права | (c) The University of Glasgow 1992-2002 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Сопровождающие | ghc-devs@haskell.org |
| Стабильность | стабильный |
| Переносимость | непереносимый (расширения GHC) |
| Безопасный Haskell | Безопасный |
| Язык | Haskell2010 |
Класс Enum определяет операции над типами с последовательным упорядочением.
Методы enumFrom... используются при трансляции арифметических последовательностей в Haskell.
Экземпляры Enum могут быть выведены для любого перечислимого типа (типа, конструкторы которого не имеют полей). Предполагается, что конструкторы без аргументов пронумерованы слева направо с помощью fromEnum от 0 до n-1. Дополнительные сведения см. в главе 10 Отчёта по Haskell.
Для любого типа, который является экземпляром класса Bounded, а также Enum, должны выполняться следующие условия:
- Вызовы
succ maxBoundиpred minBoundдолжны приводить к ошибке времени выполнения. -
fromEnumиtoEnumдолжны приводить к ошибке времени выполнения, если результирующее значение не представимо в результирующем типе. Например,toEnum 7 :: Bool— это ошибка. -
enumFromиenumFromThenдолжны быть определены с неявной границей, то есть:
enumFrom x = enumFromTo x maxBound
enumFromThen x y = enumFromThenTo x y bound
where
bound | fromEnum y >= fromEnum x = maxBound
| otherwise = minBound
Методы
Следующее значение. Для числовых типов succ прибавляет 1.
Предыдущее значение. Для числовых типов pred вычитает 1.
Преобразование из Int.
Преобразование в Int. Поведение fromEnum при применении к значению, которое слишком велико, чтобы поместиться в Int, зависит от реализации.
Используется при трансляции в Haskell конструкции [n..] с [n..] = enumFrom n; возможная реализация — enumFrom n = n : enumFrom (succ n).
Примеры
enumFrom 4 :: [Integer] = [4,5,6,7,...]
enumFrom 6 :: [Int] = [6,7,8,9,...,maxBound :: Int]
enumFromThen :: a -> a -> [a] Источник
Используется при трансляции в Haskell конструкции [n,n'..] с [n,n'..] = enumFromThen n n'; возможная реализация — enumFromThen n n' = n : n' : worker (f x) (f x n'), worker s v = v : worker s (s v), x = fromEnum n' - fromEnum n и
f n y
| n > 0 = f (n - 1) (succ y)
| n < 0 = f (n + 1) (pred y)
| otherwise = y
Примеры
enumFromThen 4 6 :: [Integer] = [4,6,8,10...]
enumFromThen 6 2 :: [Int] = [6,2,-2,-6,...,minBound :: Int]
enumFromTo :: a -> a -> [a] Источник
Используется при трансляции в Haskell конструкции [n..m] с [n..m] = enumFromTo n m; возможная реализация:
enumFromTo n m
| n <= m = n : enumFromTo (succ n) m
| otherwise = []
Примеры
enumFromTo 6 10 :: [Int] = [6,7,8,9,10]
enumFromTo 42 1 :: [Integer] = []
enumFromThenTo :: a -> a -> a -> [a] Источник
Используется при трансляции в Haskell конструкции [n,n'..m] с [n,n'..m] = enumFromThenTo n n' m; возможная реализация — enumFromThenTo n n' m = worker (f x) (c x) n m, x = fromEnum n' - fromEnum n, c x = bool (>=) ((x 0)
f n y
| n > 0 = f (n - 1) (succ y)
| n < 0 = f (n + 1) (pred y)
| otherwise = y
и
worker s c v m
| c v m = v : worker s c (s v) m
| otherwise = []
Примеры
enumFromThenTo 4 2 -6 :: [Integer] = [4,2,0,-2,-4,-6]
enumFromThenTo 6 8 2 :: [Int] = []
Экземпляры
| Enum CId Источник | |
| Enum CIno Источник | |
| Enum CKey Источник | |
| Enum CMode Источник | |
Определено в GHC.Internal.System.Posix.Types Методыsucc :: CMode -> CMode Источник pred :: CMode -> CMode Источник toEnum :: Int -> CMode Источник fromEnum :: CMode -> Int Источник enumFrom :: CMode -> [CMode] Источник enumFromThen :: CMode -> CMode -> [CMode] Источник enumFromTo :: CMode -> CMode -> [CMode] Источник enumFromThenTo :: CMode -> CMode -> CMode -> [CMode] Источник | |
| Enum CNfds Источник | |
| Enum (Fixed a) Исходный код |
Напомним, что для числовых типов >>> succ (0.000 :: Milli) 0.001 и аналогично >>> pred (0.000 :: Milli) -0.001 Другими словами, >>> succ (0.000000000000 :: Pico) 0.000000000001 и аналогично >>> pred (0.000000000000 :: Pico) -0.000000000001 Об этом стоит помнить при определении арифметических последовательностей [1..10] :: [Pico] вычисляется в Однако это не так. Напротив, подобно приведённым выше реализациям [1.000000000000, 1.00000000001, 1.00000000002, ..., 10.000000000000] и содержит Начиная с: base-2.1 |
Определено в Data.Fixed Методыsucc :: Fixed a -> Fixed a Исходный код pred :: Fixed a -> Fixed a Исходный код toEnum :: Int -> Fixed a Исходный код fromEnum :: Fixed a -> Int Исходный код enumFrom :: Fixed a -> [Fixed a] Исходный код enumFromThen :: Fixed a -> Fixed a -> [Fixed a] Исходный код enumFromTo :: Fixed a -> Fixed a -> [Fixed a] Исходный код enumFromThenTo :: Fixed a -> Fixed a -> Fixed a -> [Fixed a] Исходный код | |
| Enum (Proxy s) Исходный код | Начиная с: base-4.7.0.0 |
Определено в GHC.Internal.Data.Proxy Методыsucc :: Proxy s -> Proxy s Исходный код pred :: Proxy s -> Proxy s Исходный код toEnum :: Int -> Proxy s Исходный код fromEnum :: Proxy s -> Int Исходный код enumFrom :: Proxy s -> [Proxy s] Исходный код enumFromThen :: Proxy s -> Proxy s -> [Proxy s] Исходный код enumFromTo :: Proxy s -> Proxy s -> [Proxy s] Исходный код enumFromThenTo :: Proxy s -> Proxy s -> Proxy s -> [Proxy s] Исходный код | |
| Enum a => Enum (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const Методыsucc :: Const a b -> Const a b Исходный код pred :: Const a b -> Const a b Исходный код toEnum :: Int -> Const a b Исходный код fromEnum :: Const a b -> Int Исходный код enumFrom :: Const a b -> [Const a b] Исходный код enumFromThen :: Const a b -> Const a b -> [Const a b] Исходный код enumFromTo :: Const a b -> Const a b -> [Const a b] Исходный код enumFromThenTo :: Const a b -> Const a b -> Const a b -> [Const a b] Исходный код | |
| Enum (f a) => Enum (Ap f a) Исходный код | Начиная с: base-4.12.0.0 |
Определено в GHC.Internal.Data.Monoid Методыsucc :: Ap f a -> Ap f a Исходный код pred :: Ap f a -> Ap f a Исходный код toEnum :: Int -> Ap f a Исходный код fromEnum :: Ap f a -> Int Исходный код enumFrom :: Ap f a -> [Ap f a] Исходный код enumFromThen :: Ap f a -> Ap f a -> [Ap f a] Исходный код enumFromTo :: Ap f a -> Ap f a -> [Ap f a] Исходный код enumFromThenTo :: Ap f a -> Ap f a -> Ap f a -> [Ap f a] Исходный код | |
| Enum (f a) => Enum (Alt f a) Исходный код | Начиная с: base-4.8.0.0 |
Определено в GHC.Internal.Data.Semigroup.Internal Методыsucc :: Alt f a -> Alt f a Исходный код pred :: Alt f a -> Alt f a Исходный код toEnum :: Int -> Alt f a Исходный код fromEnum :: Alt f a -> Int Исходный код enumFrom :: Alt f a -> [Alt f a] Исходный код enumFromThen :: Alt f a -> Alt f a -> [Alt f a] Исходный код enumFromTo :: Alt f a -> Alt f a -> [Alt f a] Исходный код enumFromThenTo :: Alt f a -> Alt f a -> Alt f a -> [Alt f a] Исходный код | |
| Coercible a b => Enum (Coercion a b) Исходный код | Начиная с: base-4.7.0.0 |
Определено в GHC.Internal.Data.Type.Coercion Методыsucc :: Coercion a b -> Coercion a b Исходный код pred :: Coercion a b -> Coercion a b Исходный код toEnum :: Int -> Coercion a b Исходный код fromEnum :: Coercion a b -> Int Исходный код enumFrom :: Coercion a b -> [Coercion a b] Исходный код enumFromThen :: Coercion a b -> Coercion a b -> [Coercion a b] Исходный код enumFromTo :: Coercion a b -> Coercion a b -> [Coercion a b] Исходный код enumFromThenTo :: Coercion a b -> Coercion a b -> Coercion a b -> [Coercion a b] Исходный код | |
| a ~ b => Enum (a :~: b) Исходный код | Начиная с: base-4.7.0.0 |
Определено в GHC.Internal.Data.Type.Equality Методыsucc :: (a :~: b) -> a :~: b Исходный код pred :: (a :~: b) -> a :~: b Исходный код toEnum :: Int -> a :~: b Исходный код fromEnum :: (a :~: b) -> Int Исходный код enumFrom :: (a :~: b) -> [a :~: b] Исходный код enumFromThen :: (a :~: b) -> (a :~: b) -> [a :~: b] Исходный код enumFromTo :: (a :~: b) -> (a :~: b) -> [a :~: b] Исходный код enumFromThenTo :: (a :~: b) -> (a :~: b) -> (a :~: b) -> [a :~: b] Исходный код | |
| a ~~ b => Enum (a :~~: b) Исходный код | Начиная с: base-4.10.0.0 |
class Bounded a where Исходный код
Класс Bounded используется для обозначения верхней и нижней границ типа. Ord не является суперклассом Bounded, поскольку типы, не являющиеся вполне упорядоченными, также могут иметь верхние и нижние границы.
Класс Bounded можно вывести для любого перечислимого типа; minBound — это первый конструктор, указанный в объявлении data, а maxBound — последний. Bounded также можно вывести для типов данных с одним конструктором, составляющие типы которых принадлежат Bounded.
Экземпляры
| Bounded CNfds Источник | |
| Bounded CNlink Источник | |
| Bounded COff Источник | |
| Bounded CPid Источник | |
| Bounded CRLim Источник | |
| Bounded CSocklen Источник | |
| Bounded CSsize Источник | |
| Bounded CTcflag Источник | |
| Bounded CUid Источник | |
| Bounded Fd Источник | |
| Bounded Ordering Источник | Начиная с: base-2.1 |
| Bounded GeneralCategory Источник | Начиная с: base-2.1 |
Определено в GHC.Internal.Unicode | |
| Bounded Word16 Источник | Начиная с: base-2.1 |
| Bounded Word32 Источник | Начиная с: base-2.1 |
| Bounded Word64 Источник | Начиная с: base-2.1 |
| Bounded Word8 Источник | Начиная с: base-2.1 |
| Bounded () Источник | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum | |
| Bounded Bool Источник | Начиная с: base-2.1 |
| Bounded Char Источник | Начиная с: base-2.1 |
| Bounded Int Источник | Начиная с: base-2.1 |
| Bounded Levity Источник | Начиная с: base-4.16.0.0 |
Определено в GHC.Internal.Data.Type.Coercion | |
| a ~ b => Bounded (a :~: b) Исходный код | Начиная с: base-4.7.0.0 |
Определено в GHC.Internal.Data.Type.Equality | |
| (Bounded a, Bounded b, Bounded c) => Bounded (a, b, c) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum | |
| a ~~ b => Bounded (a :~~: b) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Type.Equality | |
| (Bounded a, Bounded b, Bounded c, Bounded d) => Bounded (a, b, c, d) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum | |
| Bounded (f (g a)) => Bounded (Compose f g a) Исходный код | Начиная с: base-4.19.0.0 |
Определено в Data.Functor.Compose | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e) => Bounded (a, b, c, d, e) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f) => Bounded (a, b, c, d, e, f) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g) => Bounded (a, b, c, d, e, f, g) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum МетодыminBound :: (a, b, c, d, e, f, g) Исходный код maxBound :: (a, b, c, d, e, f, g) Исходный код | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h) => Bounded (a, b, c, d, e, f, g, h) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum МетодыminBound :: (a, b, c, d, e, f, g, h) Исходный код maxBound :: (a, b, c, d, e, f, g, h) Исходный код | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i) => Bounded (a, b, c, d, e, f, g, h, i) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum МетодыminBound :: (a, b, c, d, e, f, g, h, i) Исходный код maxBound :: (a, b, c, d, e, f, g, h, i) Исходный код | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j) => Bounded (a, b, c, d, e, f, g, h, i, j) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum МетодыminBound :: (a, b, c, d, e, f, g, h, i, j) Исходный код maxBound :: (a, b, c, d, e, f, g, h, i, j) Исходный код | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k) => Bounded (a, b, c, d, e, f, g, h, i, j, k) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum МетодыminBound :: (a, b, c, d, e, f, g, h, i, j, k) Исходный код maxBound :: (a, b, c, d, e, f, g, h, i, j, k) Исходный код | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l) => Bounded (a, b, c, d, e, f, g, h, i, j, k, l) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum МетодыminBound :: (a, b, c, d, e, f, g, h, i, j, k, l) Исходный код maxBound :: (a, b, c, d, e, f, g, h, i, j, k, l) Исходный код | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l, Bounded m) => Bounded (a, b, c, d, e, f, g, h, i, j, k, l, m) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum МетодыminBound :: (a, b, c, d, e, f, g, h, i, j, k, l, m) Исходный код maxBound :: (a, b, c, d, e, f, g, h, i, j, k, l, m) Исходный код | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l, Bounded m, Bounded n) => Bounded (a, b, c, d, e, f, g, h, i, j, k, l, m, n) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum МетодыminBound :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n) Исходный код maxBound :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n) Исходный код | |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l, Bounded m, Bounded n, Bounded o) => Bounded (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Enum МетодыminBound :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) Исходный код maxBound :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) Исходный код |
enumerate :: (Enum a, Bounded a) => [a] Исходный код
Возвращает список всех значений типа перечисления
enumerate часто используется для получения списка всех значений пользовательской структуры данных-перечисления, например пользовательского перечисления Color ниже:
data Color = Yellow | Red | Blue
deriving (Enum, Bounded, Show)
allColors :: [Color]
allColors = enumerate
-- Result: [Yellow, Red, Blue]
Обратите внимание, что также нужно вывести класс типов Bounded; одного лишь Enum недостаточно. Enum позволяет выполнять последовательное перечисление, а Bounded предоставляет значения minBound и maxBound.
enumerate часто используется вместе с синтаксисом TypeApplications. Вот пример использования enumerate для получения всех значений типа Ordering:
> enumerate @Ordering
- LT, EQ, GT
Символ @ здесь предоставляется языковым расширением TypeApplications.
Начиная с: base-4.22.0.0
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/base-4.22.0.0-66f8/Data-Enum.html