Data.List.NonEmpty
| Copyright | (C) 2011-2015 Edward Kmett (C) 2010 Tony Morris Oliver Taylor Eelis van der Weegen |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Описание
Список NonEmpty — это список, который всегда содержит хотя бы один элемент, но в остальном идентичен традиционному типу списка по сложности и по API. Вам почти наверняка понадобится импортировать этот модуль qualified.
Since: base-4.9.0.0
Тип непустых потоков
Непустой (и нестрогий) тип списка.
Since: base-4.9.0.0
Конструкторы
| a :| [a] infixr 5 |
Определено в Data.Functor.Classes МетодыliftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> NonEmpty a -> ShowS Исходный код liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [NonEmpty a] -> ShowS Исходный код | |
| Read1 NonEmpty | С момента: base-4.10.0.0 |
Определено в Data.Functor.Classes МетодыliftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (NonEmpty a) Исходный код liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [NonEmpty a] Исходный код liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (NonEmpty a) Исходный код liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [NonEmpty a] Исходный код | |
| Ord1 NonEmpty | С момента: base-4.10.0.0 |
Определено в Data.Functor.Classes МетодыliftCompare :: (a -> b -> Ordering) -> NonEmpty a -> NonEmpty b -> Ordering Исходный код | |
| Eq a => Eq (NonEmpty a) | С момента: base-4.9.0.0 |
| Data a => Data (NonEmpty a) | С момента: base-4.9.0.0 |
Определено в Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NonEmpty a -> c (NonEmpty a) Source gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (NonEmpty a) Source toConstr :: NonEmpty a -> Constr Source dataTypeOf :: NonEmpty a -> DataType Source dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (NonEmpty a)) Source dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (NonEmpty a)) Source gmapT :: (forall b. Data b => b -> b) -> NonEmpty a -> NonEmpty a Source gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Source gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Source gmapQ :: (forall d. Data d => d -> u) -> NonEmpty a -> [u] Source gmapQi :: Int -> (forall d. Data d => d -> u) -> NonEmpty a -> u Source gmapM :: Monad m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source | |
| Ord a => Ord (NonEmpty a) | С версии: base-4.9.0.0 |
Определено в GHC.Base Методыcompare :: NonEmpty a -> NonEmpty a -> Ordering Source (<) :: NonEmpty a -> NonEmpty a -> Bool Source (<=) :: NonEmpty a -> NonEmpty a -> Bool Source (>) :: NonEmpty a -> NonEmpty a -> Bool Source (>=) :: NonEmpty a -> NonEmpty a -> Bool Source | |
| Read a => Read (NonEmpty a) | С версии: base-4.11.0.0 |
| тип Rep1 NonEmpty | |
Определено в GHC.Generics тип Rep1 NonEmpty = D1 ('MetaData "NonEmpty" "GHC.Base" "base" 'False) (C1 ('MetaCons ":|" ('InfixI 'LeftAssociative 9) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 []))) | |
Преобразования потоков с непустыми данными
map :: (a -> b) -> NonEmpty a -> NonEmpty b Источник
Применение функции к потоку с непустыми данными.
intersperse :: a -> NonEmpty a -> NonEmpty a Источник
'intersperse x xs' чередует элементы списка с копиями значения x.
intersperse 0 (1 :| [2,3]) == 1 :| [0,2,0,3]
scanl :: Foldable f => (b -> a -> b) -> b -> f a -> NonEmpty b Источник
scanl аналогично foldl, но возвращает поток последовательных результирующих значений слева:
scanl f z [x1, x2, ...] == z :| [z `f` x1, (z `f` x1) `f` x2, ...]
Обратите внимание, что
last (scanl f z xs) == foldl f z xs.
scanr :: Foldable f => (a -> b -> b) -> b -> f a -> NonEmpty b Источник
scanr является правым дуалом scanl. Обратите внимание, что
head (scanr f z xs) == foldr f z xs.
scanl1 :: (a -> a -> a) -> NonEmpty a -> NonEmpty a Источник
scanl1 — это вариант scanl, у которого нет аргумента начального значения.
scanl1 f [x1, x2, ...] == x1 :| [x1 `f` x2, x1 `f` (x2 `f` x3), ...]
scanr1 :: (a -> a -> a) -> NonEmpty a -> NonEmpty a Источник
scanr1 — это вариант scanr, у которого нет аргумента начального значения.
transpose :: NonEmpty (NonEmpty a) -> NonEmpty (NonEmpty a) Источник
transpose для NonEmpty, ведет себя так же, как transpose. Строки/столбцы могут иметь различную длину, в этом случае > transpose . transpose /= id
sortBy :: (a -> a -> Ordering) -> NonEmpty a -> NonEmpty a Источник
sortBy для NonEmpty, ведет себя так же, как sortBy
sortWith :: Ord o => (a -> o) -> NonEmpty a -> NonEmpty a Источник
sortWith для NonEmpty, ведет себя так же, как:
sortBy . comparing
Основные функции
length :: NonEmpty a -> Int Источник
Количество элементов в списке с непустыми данными.
head :: NonEmpty a -> a Источник
Извлечение первого элемента потока.
tail :: NonEmpty a -> [a] Источник
Извлечение, возможно, пустого хвоста потока.
last :: NonEmpty a -> a Источник
Извлечение последнего элемента потока.
init :: NonEmpty a -> [a] Источник
Извлечение всех элементов, кроме последнего, из потока.
(<|) :: a -> NonEmpty a -> NonEmpty a infixr 5 Источник
Добавление элемента в начало потока.
cons :: a -> NonEmpty a -> NonEmpty a Источник
Синоним для <|.
uncons :: NonEmpty a -> (a, Maybe (NonEmpty a)) Источник
uncons возвращает первый элемент потока и поток оставшихся элементов, если таковые имеются.
sort :: Ord a => NonEmpty a -> NonEmpty a Source
Сортировать поток.
reverse :: NonEmpty a -> NonEmpty a Source
reverse конечный поток NonEmpty.
inits :: Foldable f => f a -> NonEmpty [a] Source
Функция inits принимает поток xs и возвращает все конечные префиксы xs.
tails :: Foldable f => f a -> NonEmpty [a] Source
Функция tails принимает поток xs и возвращает все суффиксы xs.
Создание потоков
iterate :: (a -> a) -> a -> NonEmpty a Source
iterate f x генерирует бесконечную последовательность повторных применений f к x.
iterate f x = x :| [f x, f (f x), ..]
repeat :: a -> NonEmpty a Source
repeat x возвращает постоянный поток, где все элементы равны x.
cycle :: NonEmpty a -> NonEmpty a Source
cycle xs возвращает бесконечное повторение xs:
cycle (1 :| [2,3]) = 1 :| [2,3,1,2,3,...]
unfold :: (a -> (b, Maybe a)) -> a -> NonEmpty b Source
Устарело: используйте unfoldr
unfold создаёт новый поток, многократно применяя функцию разворачивания к начальному значению для создания элемента типа b и нового начального значения. Когда функция разворачивания возвращает Nothing, вместо нового начального значения, поток заканчивается.
insert :: (Foldable f, Ord a) => a -> f a -> NonEmpty a Source
insert x xs вставляет x в последнюю позицию в xs, где оно всё ещё меньше или равно следующему элементу. В частности, если список предварительно отсортирован, результат также будет отсортирован.
some1 :: Alternative f => f a -> f (NonEmpty a) Source
some1 x последовательно выполняет x один или несколько раз.
Извлечение подсписков
take :: Int -> NonEmpty a -> [a] Source
take n xs возвращает первые n элементов xs.
drop :: Int -> NonEmpty a -> [a] Source
drop n xs отбрасывает первые n элементы с начала последовательности xs.
splitAt :: Int -> NonEmpty a -> ([a], [a]) Source
splitAt n xs возвращает пару, состоящую из префикса xs длины n и оставшегося потока, непосредственно следующего за этим префиксом.
'splitAt' n xs == ('take' n xs, 'drop' n xs)
xs == ys ++ zs where (ys, zs) = 'splitAt' n xs
takeWhile :: (a -> Bool) -> NonEmpty a -> [a] Source
takeWhile p xs возвращает наибольший префикс потока xs, для которого предикат p выполняется.
dropWhile :: (a -> Bool) -> NonEmpty a -> [a] Source
dropWhile p xs возвращает суффикс, оставшийся после takeWhile p xs.
span :: (a -> Bool) -> NonEmpty a -> ([a], [a]) Source
span p xs возвращает наибольший префикс xs, удовлетворяющий p, вместе с остатком потока.
'span' p xs == ('takeWhile' p xs, 'dropWhile' p xs)
xs == ys ++ zs where (ys, zs) = 'span' p xs
break :: (a -> Bool) -> NonEmpty a -> ([a], [a]) Source
Функция break p эквивалентна span (not . p).
filter :: (a -> Bool) -> NonEmpty a -> [a] Source
filter p xs удаляет из xs любые элементы, которые не удовлетворяют p.
partition :: (a -> Bool) -> NonEmpty a -> ([a], [a]) Source
Функция partition принимает предикат p и поток xs, и возвращает пару списков. Первый список соответствует элементам xs, для которых выполняется p; второй соответствует элементам xs, для которых p не выполняется.
'partition' p xs = ('filter' p xs, 'filter' (not . p) xs)
group :: (Foldable f, Eq a) => f a -> [NonEmpty a] Source
Функция group принимает поток и возвращает список потоков, такой, что уплощение полученного списка равно аргументу. Кроме того, каждый поток в результирующем списке содержит только равные элементы. Например, в обозначении списков:
'group' $ 'cycle' "Mississippi" = "M" : "i" : "ss" : "i" : "ss" : "i" : "pp" : "i" : "M" : "i" : ...
groupBy :: Foldable f => (a -> a -> Bool) -> f a -> [NonEmpty a] Source
groupBy работает так же, как group, но вместо == использует предоставленный предикат равенства.
groupWith :: (Foldable f, Eq b) => (a -> b) -> f a -> [НепустойСписок a] Источник
groupWith работает подобно group, но использует предоставленное отображение при сравнении на равенство
groupAllWith :: Ord b => (a -> b) -> [a] -> [НепустойСписок a] Источник
groupAllWith работает подобно groupWith, но сначала сортирует список, чтобы в выходных данных каждая группа эквивалентности содержала не более одного списка
group1 :: Eq a => НепустойСписок a -> НепустойСписок (НепустойСписок a) Источник
group1 работает подобно group, но использует знание о том, что входной список непустой, для гарантированного получения непустого результата.
groupBy1 :: (a -> a -> Булево) -> НепустойСписок a -> НепустойСписок (НепустойСписок a) Источник
groupBy1 относится к group1 так же, как groupBy относится к group.
groupWith1 :: Eq b => (a -> b) -> НепустойСписок a -> НепустойСписок (НепустойСписок a) Источник
groupWith1 относится к group1 так же, как groupWith относится к group
groupAllWith1 :: Ord b => (a -> b) -> НепустойСписок a -> НепустойСписок (НепустойСписок a) Источник
groupAllWith1 относится к groupWith1 так же, как groupAllWith относится к groupWith
Предикаты подсписков
isPrefixOf :: Eq a => [a] -> НепустойСписок a -> Булево Источник
Функция isPrefixOf возвращает True, если первый аргумент является префиксом второго.
Операции "множества"
nub :: Eq a => НепустойСписок a -> НепустойСписок a Источник
Функция nub удаляет дубликаты из списка. В частности, она оставляет только первое вхождение каждого элемента. (Название nub означает "сущность".) Это частный случай nubBy, который позволяет программисту указать собственное условие неравенства.
nubBy :: (a -> a -> Булево) -> НепустойСписок a -> НепустойСписок a Источник
Функция nubBy ведет себя точно так же, как nub, за исключением того, что она использует предоставленное пользователем предикат равенства вместо перегруженной функции ==.
Индексирование потоков
(!!) :: НепустойСписок a -> Целое -> a infixl 9 Источник
xs !! n возвращает элемент потока xs с индексом n. Обратите внимание, что у первого элемента потока индекс 0.
Предупреждение: отрицательный или вне диапазона индекс приведет к ошибке.
Объединение и разбиение потоков
zip :: НепустойСписок a -> НепустойСписок b -> НепустойСписок (a, b) Источник
Функция zip принимает два потока и возвращает поток соответствующих пар.
zipWith :: (a -> b -> c) -> НепустойСписок a -> НепустойСписок b -> НепустойСписок c Источник
Функция zipWith обобщает zip. Вместо создания кортежей элементы комбинируются с помощью функции, переданной в качестве первого аргумента.
unzip :: Функтор f => f (a, b) -> (f a, f b) Источник
Функция unzip является обратной функцией zip.
Преобразование в список и обратно
fromList :: [a] -> НепустойСписок a Источник
Преобразует обычный список в поток NonEmpty.
Вызывает ошибку, если входной список пуст.
toList :: НепустойСписок a -> [a] Источник
Эффективно преобразует поток в обычный список.
nonEmpty :: [a] -> Возможность (НепустойСписок a) Источник
nonEmpty эффективно преобразует обычный список в поток NonEmpty, возвращая Nothing если входной список пуст.
xor :: НепустойСписок Булево -> Булево Источник
Вычислить n-арную логическую операцию исключающего ИЛИ над списком NonEmpty.
© 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-List-NonEmpty.html