GHC.Enum
| Авторские права | (c) Университет Глазго 1992-2002 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддержка | cvs-ghc@haskell.org |
| Устойчивость | внутренняя |
| Переносимость | непереносимая (расширения GHC) |
| Безопасный Haskell | Достоверный |
| Язык | Haskell2010 |
class Bounded a where Исходный код
Класс Bounded используется для именования верхних и нижних границ типа. Ord не является суперклассом Bounded, поскольку типы, которые не являются полностью упорядоченными, также могут иметь верхние и нижние границы.
Класс Bounded может быть получен для любого типа перечисления; minBound — это первый конструктор, перечисленный в объявлении data, а maxBound — последний. Bounded также может быть получен для типов данных с одним конструктором, составляющие типы которых находятся в Bounded.
Примеры
| Bounded Bool | Since: base-2.1 |
| Bounded Char | Since: base-2.1 |
| Bounded Int | Since: base-2.1 |
| Bounded Int8 | Since: base-2.1 |
| Bounded Int16 | Since: base-2.1 |
| Bounded Int32 | Since: base-2.1 |
| Bounded Int64 | Since: base-2.1 |
| Bounded Ordering | Since: base-2.1 |
| Bounded Word | Since: base-2.1 |
| Bounded Word8 | Since: base-2.1 |
| Bounded Word16 | Since: base-2.1 |
| Bounded Word32 | Since: base-2.1 |
| Bounded Word64 | Since: base-2.1 |
| Bounded VecCount | Since: base-4.10.0.0 |
| Bounded VecElem | Since: base-4.10.0.0 |
| Bounded () | Since: base-2.1 |
| Bounded GeneralCategory | Since: base-2.1 |
Определено в GHC.Unicode | |
| Bounded IntPtr | |
| Bounded WordPtr | |
| Bounded CUIntMax | |
| Bounded CIntMax | |
| Bounded CUIntPtr | |
| Bounded CIntPtr | |
| Bounded CSigAtomic | |
| Bounded CShort | |
| Bounded CUChar | |
| Bounded CSChar | |
| Bounded CChar | |
| Bounded DecidedStrictness | Since: base-4.9.0.0 |
Defined in GHC.Generics | |
| Bounded SourceStrictness | Since: base-4.9.0.0 |
Defined in GHC.Generics | |
| Bounded SourceUnpackedness | Since: base-4.9.0.0 |
Defined in GHC.Generics | |
| Bounded Associativity | Since: base-4.9.0.0 |
Defined in GHC.Generics | |
| Bounded Any | Since: base-2.1 |
| Bounded All | Since: base-2.1 |
| Bounded Fd | |
| Bounded CNfds | |
| Bounded a => Bounded (Sum a) | Since: base-2.1 |
| Bounded a => Bounded (Dual a) | Since: base-2.1 |
| Bounded a => Bounded (Identity a) | Since: base-4.9.0.0 |
| Bounded m => Bounded (WrappedMonoid m) | Since: base-4.9.0.0 |
Определено в Data.Semigroup | |
| Bounded a => Bounded (Last a) | Since: base-4.9.0.0 |
| Bounded a => Bounded (First a) | Since: base-4.9.0.0 |
| Bounded a => Bounded (Max a) | Since: base-4.9.0.0 |
| Bounded a => Bounded (Min a) | Since: base-4.9.0.0 |
| (Bounded a, Bounded b) => Bounded (a, b) | Since: base-2.1 |
| Bounded (Proxy t) | Since: base-4.7.0.0 |
| (Bounded a, Bounded b, Bounded c) => Bounded (a, b, c) | Since: base-2.1 |
| a ~ b => Bounded (a :~: b) | Since: base-4.7.0.0 |
| Coercible a b => Bounded (Coercion a b) | Since: base-4.7.0.0 |
| (Applicative f, Bounded a) => Bounded (Ap f a) | Since: base-4.12.0.0 |
| Bounded a => Bounded (Const a b) | Since: base-4.9.0.0 |
| (Bounded a, Bounded b, Bounded c, Bounded d) => Bounded (a, b, c, d) | Since: base-2.1 |
| a ~~ b => Bounded (a :~~: b) | Since: base-4.10.0.0 |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e) => Bounded (a, b, c, d, e) | Since: base-2.1 |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f) => Bounded (a, b, c, d, e, f) | Since: base-2.1 |
| (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g) => Bounded (a, b, c, d, e, f, g) | Since: base-2.1 |
| (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) | Since: base-2.1 |
| (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) | Since: base-2.1 |
| (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) | Since: base-2.1 |
| (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) | Since: base-2.1 |
| (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) | Since: base-2.1 |
| (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) | Since: base-2.1 |
| (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) | Since: base-2.1 |
Класс 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] = []
Примеры
Определено в System.Posix.Types Методыsucc :: CSsize -> CSsize Источник pred :: CSsize -> CSsize Источник toEnum :: Int -> CSsize Источник fromEnum :: CSsize -> Int Источник enumFrom :: CSsize -> [CSsize] Источник enumFromThen :: CSsize -> CSsize -> [CSsize] Источник enumFromTo :: CSsize -> CSsize -> [CSsize] Источник enumFromThenTo :: CSsize -> CSsize -> CSsize -> [CSsize] Источник | |
| Enum CPid | |
| Enum COff | |
| Enum CMode | |
Определено в Data.Semigroup Методыsucc :: Last a -> Last a Source pred :: Last a -> Last a Source toEnum :: Int -> Last a Source fromEnum :: Last a -> Int Source enumFrom :: Last a -> [Last a] Source enumFromThen :: Last a -> Last a -> [Last a] Source enumFromTo :: Last a -> Last a -> [Last a] Source enumFromThenTo :: Last a -> Last a -> Last a -> [Last a] Source | |
| Enum a => Enum (First a) | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыsucc :: First a -> First a Source pred :: First a -> First a Source toEnum :: Int -> First a Source fromEnum :: First a -> Int Source enumFrom :: First a -> [First a] Source enumFromThen :: First a -> First a -> [First a] Source enumFromTo :: First a -> First a -> [First a] Source enumFromThenTo :: First a -> First a -> First a -> [First a] Source | |
| Enum a => Enum (Max a) | С версии: base-4.9.0.0 |
| Enum a => Enum (Min a) | С версии: base-4.9.0.0 |
boundedEnumFrom :: (Enum a, Bounded a) => a -> [a] Исходный код
boundedEnumFromThen :: (Enum a, Bounded a) => a -> a -> [a] Исходный код
toEnumError :: Show a => String -> Int -> (a, a) -> b Исходный код
© 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/GHC-Enum.html