Spec-Zone.ru › Haskell 9

Data.List.NonEmpty

Авторские права (C) 2011-2015 Edward Kmett
(C) 2010 Tony Morris Oliver Taylor Eelis van der Weegen
Лицензия В стиле BSD (см. файл LICENSE)
Сопровождающий libraries@haskell.org
Стабильность предварительная
Переносимость переносимая
Безопасный Haskell Доверенный
Язык Haskell2010

Содержание

  • Тип непустых списков
  • Преобразования непустых списков
  • Основные функции
  • Создание списков
  • Извлечение подсписков
  • Предикаты для подсписков
  • Операции «множеств»
  • Индексация списков
  • Объединение списков попарно и разделение
  • Преобразование в список и обратно

Описание

Список NonEmpty — это список, в котором всегда есть хотя бы один элемент, но в остальном он идентичен традиционному типу списка по сложности и API. Почти наверняка вам понадобится импортировать этот модуль qualified.

Начиная с: base-4.9.0.0

Тип непустых списков

data NonEmpty a Источник

Тип непустого (и нестрогого) списка.

Начиная с: base-4.9.0.0

Конструкторы

a :| [a] infixr 5
Экземпляры
Подробности экземпляров
Foldable1 NonEmpty Исходный код

Начиная с: base-4.18.0.0

Подробности экземпляра

Определено в Data.Foldable1

Методы

fold1 :: Semigroup m => NonEmpty m -> m Исходный код

foldMap1 :: Semigroup m => (a -> m) -> NonEmpty a -> m Исходный код

foldMap1' :: Semigroup m => (a -> m) -> NonEmpty a -> m Исходный код

toNonEmpty :: NonEmpty a -> NonEmpty a Исходный код

maximum :: Ord a => NonEmpty a -> a Исходный код

minimum :: Ord a => NonEmpty a -> a Исходный код

head :: NonEmpty a -> a Исходный код

last :: NonEmpty a -> a Исходный код

foldrMap1 :: (a -> b) -> (a -> b -> b) -> NonEmpty a -> b Исходный код

foldlMap1' :: (a -> b) -> (b -> a -> b) -> NonEmpty a -> b Исходный код

foldlMap1 :: (a -> b) -> (b -> a -> b) -> NonEmpty a -> b Исходный код

foldrMap1' :: (a -> b) -> (a -> b -> b) -> NonEmpty a -> b Исходный код

Eq1 NonEmpty Исходный код

Начиная с: base-4.10.0.0

Подробности экземпляра

Определено в Data.Functor.Classes

Методы

liftEq :: (a -> b -> Bool) -> NonEmpty a -> NonEmpty b -> Bool Исходный код

Ord1 NonEmpty Исходный код

Начиная с: base-4.10.0.0

Подробности экземпляра

Определено в Data.Functor.Classes

Методы

liftCompare :: (a -> b -> Ordering) -> NonEmpty a -> NonEmpty b -> Ordering Исходный код

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] Исходный код

Show1 NonEmpty Исходный код

Начиная с: base-4.10.0.0

Подробности экземпляра

Определено в Data.Functor.Classes

Методы

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> NonEmpty a -> ShowS Исходный код

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [NonEmpty a] -> ShowS Исходный код

Applicative NonEmpty Исходный код

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Data.NonEmpty

Методы

pure :: a -> NonEmpty a Исходный код

(<*>) :: NonEmpty (a -> b) -> NonEmpty a -> NonEmpty b Исходный код

liftA2 :: (a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c Исходный код

(*>) :: NonEmpty a -> NonEmpty b -> NonEmpty b Исходный код

(<*) :: NonEmpty a -> NonEmpty b -> NonEmpty a Исходный код

Functor NonEmpty Исходный код

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Data.NonEmpty

Методы

fmap :: (a -> b) -> NonEmpty a -> NonEmpty b Исходный код

(<$) :: a -> NonEmpty b -> NonEmpty a Исходный код

Monad NonEmpty Исходный код

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Data.NonEmpty

Методы

(>>=) :: NonEmpty a -> (a -> NonEmpty b) -> NonEmpty b Исходный код

(>>) :: NonEmpty a -> NonEmpty b -> NonEmpty b Исходный код

return :: a -> NonEmpty a Исходный код

MonadFix NonEmpty Исходный код

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Control.Monad.Fix

Методы

mfix :: (a -> NonEmpty a) -> NonEmpty a Исходный код

MonadZip NonEmpty Исходный код

Начиная с: ghc-internal-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Control.Monad.Zip

Методы

mzip :: NonEmpty a -> NonEmpty b -> NonEmpty (a, b) Исходный код

mzipWith :: (a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c Исходный код

munzip :: NonEmpty (a, b) -> (NonEmpty a, NonEmpty b) Исходный код

Foldable NonEmpty Исходный код

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Data.Foldable

Методы

fold :: Monoid m => NonEmpty m -> m Исходный код

foldMap :: Monoid m => (a -> m) -> NonEmpty a -> m Исходный код

foldMap' :: Monoid m => (a -> m) -> NonEmpty a -> m Исходный код

foldr :: (a -> b -> b) -> b -> NonEmpty a -> b Исходный код

foldr' :: (a -> b -> b) -> b -> NonEmpty a -> b Исходный код

foldl :: (b -> a -> b) -> b -> NonEmpty a -> b Исходный код

foldl' :: (b -> a -> b) -> b -> NonEmpty a -> b Исходный код

foldr1 :: (a -> a -> a) -> NonEmpty a -> a Исходный код

foldl1 :: (a -> a -> a) -> NonEmpty a -> a Исходный код

toList :: NonEmpty a -> [a] Исходный код

null :: NonEmpty a -> Bool Исходный код

length :: NonEmpty a -> Int Исходный код

elem :: Eq a => a -> NonEmpty a -> Bool Исходный код

maximum :: Ord a => NonEmpty a -> a Исходный код

minimum :: Ord a => NonEmpty a -> a Исходный код

sum :: Num a => NonEmpty a -> a Исходный код

product :: Num a => NonEmpty a -> a Исходный код

Traversable NonEmpty Исходный код

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Data.Traversable

Методы

traverse :: Applicative f => (a -> f b) -> NonEmpty a -> f (NonEmpty b) Источник

sequenceA :: Applicative f => NonEmpty (f a) -> f (NonEmpty a) Источник

mapM :: Monad m => (a -> m b) -> NonEmpty a -> m (NonEmpty b) Источник

sequence :: Monad m => NonEmpty (m a) -> m (NonEmpty a) Источник

Generic1 NonEmpty Источник
Подробности экземпляра

Определено в GHC.Internal.Generics

Связанные типы

type Rep1 NonEmpty

Начиная с: base-4.6.0.0

Подробности экземпляра

Определено в GHC.Internal.Generics

type Rep1 NonEmpty = D1 ('MetaData "NonEmpty" "GHC.Internal.Base" "ghc-internal" 'False) (C1 ('MetaCons ":|" ('InfixI 'RightAssociative 5) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 [])))

Методы

from1 :: NonEmpty a -> Rep1 NonEmpty a Источник

to1 :: Rep1 NonEmpty a -> NonEmpty a Источник

Lift a => Lift (NonEmpty a :: Type) Источник

Начиная с: template-haskell-2.15.0.0

Подробности экземпляра

Определено в GHC.Internal.TH.Lift

Методы

lift :: Quote m => NonEmpty a -> m Exp Источник

liftTyped :: forall (m :: Type -> Type). Quote m => NonEmpty a -> Code m (NonEmpty a) Источник

Semigroup (NonEmpty a) Источник

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Data.NonEmpty

Методы

(<>) :: NonEmpty a -> NonEmpty a -> NonEmpty a Источник

sconcat :: NonEmpty (NonEmpty a) -> NonEmpty a Источник

stimes :: Integral b => b -> NonEmpty a -> NonEmpty a Источник

Eq a => Eq (NonEmpty a) Источник

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Base

Методы

(==) :: NonEmpty a -> NonEmpty a -> Bool Источник

(/=) :: NonEmpty a -> NonEmpty a -> Bool Источник

Ord a => Ord (NonEmpty a) Источник

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Base

Методы

compare :: NonEmpty a -> NonEmpty a -> Ordering Источник

(<) :: NonEmpty a -> NonEmpty a -> Bool Источник

(<=) :: NonEmpty a -> NonEmpty a -> Bool Источник

(>) :: NonEmpty a -> NonEmpty a -> Bool Источник

(>=) :: NonEmpty a -> NonEmpty a -> Bool Источник

max :: NonEmpty a -> NonEmpty a Источник

min :: NonEmpty a -> NonEmpty a -> NonEmpty a Источник

Data a => Data (NonEmpty a) Источник

Начиная с: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Internal.Data.Data

Методы

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NonEmpty a -> c (NonEmpty a) Источник

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (NonEmpty a) Источник

toConstr :: NonEmpty a -> Constr Источник

dataTypeOf :: NonEmpty a -> DataType Источник

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (NonEmpty a)) Источник

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (NonEmpty a)) Источник

gmapT :: (forall b. Data b => b -> b) -> NonEmpty a -> NonEmpty a Источник

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Источник

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Источник

gmapQ :: (forall d. Data d => d -> u) -> NonEmpty a -> [u] Источник

gmapQi :: Int -> (forall d. Data d => d -> u) -> NonEmpty a -> u Источник

gmapM :: Monad m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Источник

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Источник

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Источник

Generic (NonEmpty a) Источник
Подробности экземпляра

Определено в GHC.Internal.Generics

Связанные типы

type Rep (NonEmpty a)

Начиная с: base-4.6.0.0

Подробности экземпляра

Определено в GHC.Internal.Generics

type Rep (NonEmpty a) = D1 ('MetaData "NonEmpty" "GHC.Internal.Base" "ghc-internal" 'False) (C1 ('MetaCons ":|" ('InfixI 'RightAssociative 5) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [a])))

Методы

from :: NonEmpty a -> Rep (NonEmpty a) x Источник

to :: Rep (NonEmpty a) x -> NonEmpty a Источник

IsList (NonEmpty a) Источник

Начиная с: base-4.9.0.0

Подробности экземпляра

Определён в GHC.Internal.IsList

Связанные типы

type Item (NonEmpty a)
Подробности экземпляра

Определён в GHC.Internal.IsList

type Item (NonEmpty a) = a

Методы

fromList :: [Item (NonEmpty a)] -> NonEmpty a Исходный код

fromListN :: Int -> [Item (NonEmpty a)] -> NonEmpty a Исходный код

toList :: NonEmpty a -> [Item (NonEmpty a)] Исходный код

Read a => Read (NonEmpty a) Исходный код

Начиная с: base-4.11.0.0

Подробности экземпляра

Определён в GHC.Internal.Read

Методы

readsPrec :: Int -> ReadS (NonEmpty a) Исходный код

readList :: ReadS [NonEmpty a] Исходный код

readPrec :: ReadPrec (NonEmpty a) Исходный код

readListPrec :: ReadPrec [NonEmpty a] Исходный код

Show a => Show (NonEmpty a) Исходный код

Начиная с: base-4.11.0.0

Подробности экземпляра

Определён в GHC.Internal.Show

Методы

showsPrec :: Int -> NonEmpty a -> ShowS Исходный код

show :: NonEmpty a -> String Исходный код

showList :: [NonEmpty a] -> ShowS Исходный код

type Rep1 NonEmpty Исходный код

Начиная с: base-4.6.0.0

Подробности экземпляра

Определён в GHC.Internal.Generics

type Rep1 NonEmpty = D1 ('MetaData "NonEmpty" "GHC.Internal.Base" "ghc-internal" 'False) (C1 ('MetaCons ":|" ('InfixI 'RightAssociative 5) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 [])))
type Rep (NonEmpty a) Исходный код

Начиная с: base-4.6.0.0

Подробности экземпляра

Определён в GHC.Internal.Generics

type Rep (NonEmpty a) = D1 ('MetaData "NonEmpty" "GHC.Internal.Base" "ghc-internal" 'False) (C1 ('MetaCons ":|" ('InfixI 'RightAssociative 5) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [a])))
type Item (NonEmpty a) Исходный код
Подробности экземпляра

Определён в GHC.Internal.IsList

type Item (NonEmpty a) = a

Преобразования непустых потоков

map :: (a -> b) -> NonEmpty a -> NonEmpty b Исходный код

Применяет функцию к NonEmpty потоку.

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 Исходный код

Количество элементов в списке NonEmpty.

compareLength :: NonEmpty a -> Int -> Ordering Исходный код

Используйте compareLength xs n как более безопасную и быструю альтернативу compare (length xs) n. Аналогично, лучше написать compareLength xs 10 == LT вместо length xs < 10.

Если length принудительно вычисляет и обходит весь каркас xs (что может привести к бесконечному вычислению, если xs бесконечен), то compareLength обходит не более n элементов, чтобы определить результат.

>>> compareLength ('a' :| []) 1
EQ
>>> compareLength ('a' :| ['b']) 3
LT
>>> compareLength (0 :| [1..]) 100
GT
>>> compareLength undefined 0
GT
>>> compareLength ('a' :| 'b' : undefined) 1
GT

Начиная с: base-4.21.0.0

head :: NonEmpty a -> a Исходный код

Извлекает первый элемент потока.

tail :: NonEmpty a -> [a] Исходный код

Извлекает, возможно, пустой хвост потока.

last :: NonEmpty a -> a Исходный код

Извлекает последний элемент потока.

init :: NonEmpty a -> [a] Исходный код

Извлекает все элементы потока, кроме последнего.

singleton :: a -> NonEmpty a Исходный код

Создаёт список NonEmpty из одного элемента.

Начиная с: base-4.15

(<|) :: a -> NonEmpty a -> NonEmpty a infixr 5 Исходный код

Добавляет элемент в начало потока.

cons :: a -> NonEmpty a -> NonEmpty a Исходный код

Синоним <|.

uncons :: NonEmpty a -> (a, Maybe (NonEmpty a)) Исходный код

uncons возвращает первый элемент потока и поток оставшихся элементов, если они есть.

unfoldr :: (a -> (b, Maybe a)) -> a -> NonEmpty b Исходный код

Функция unfoldr аналогична операции unfoldr из Data.List.

sort :: Ord a => NonEmpty a -> NonEmpty a Исходный код

Сортирует поток.

sortOn :: Ord b => (a -> b) -> NonEmpty a -> NonEmpty a Исходный код

Сортирует NonEmpty по проекции его элементов, заданной пользователем. Более подробные сведения см. в sortOn.

Примеры
Развернуть
>>> sortOn fst $ (2, "world") :| [(4, "!"), (1, "Hello")]
(1,"Hello") :| [(2,"world"),(4,"!")]
>>> sortOn List.length ("jim" :| ["creed", "pam", "michael", "dwight", "kevin"])
"jim" :| ["pam","creed","kevin","dwight","michael"]
Примечания о производительности
Развернуть

Эта функция сводит к минимуму число вычислений проекции, материализуя проекции в промежуточном списке.

Для тривиальных проекций предпочтительнее использовать sortBy с comparing, например:

>>> sortBy (comparing fst) $ (3, 1) :| [(2, 2), (1, 3)]
(1,3) :| [(2,2),(3,1)]

Или, чтобы получить точно такой же API, как у sortOn, можно использовать `sortBy . comparing`:

>>> (sortBy . comparing) fst $ (3, 1) :| [(2, 2), (1, 3)]
(1,3) :| [(2,2),(3,1)]

sortWith — это псевдоним для `sortBy . comparing`.

Начиная с: base-4.20.0.0

reverse :: NonEmpty a -> NonEmpty a Исходный код

reverse конечный поток NonEmpty.

inits :: Foldable f => f a -> NonEmpty [a] Исходный код

Функция inits принимает поток xs и возвращает все его конечные префиксы xs, начиная с самого короткого. Результат является NonEmpty, поскольку первым элементом результата всегда является пустой список.

inits [1,2,3] == [] :| [[1], [1,2], [1,2,3]]
inits [1] == [] :| [[1]]
inits [] == [] :| []

inits1 :: NonEmpty a -> NonEmpty (NonEmpty a) Исходный код

Функция inits1 принимает поток NonEmpty xs и возвращает все его NonEmpty конечные префиксы xs, начиная с самого короткого.

inits1 (1 :| [2,3]) == (1 :| []) :| [1 :| [2], 1 :| [2,3]]
inits1 (1 :| []) == (1 :| []) :| []

Начиная с: base-4.18

tails :: Foldable f => f a -> NonEmpty [a] Исходный код

Функция tails принимает поток xs и возвращает все его суффиксы xs, начиная с самого длинного. Результат является NonEmpty, поскольку последним элементом результата всегда является пустой список.

tails [1,2,3] == [1,2,3] :| [[2,3], [3], []]
tails [1] == [1] :| [[]]
tails [] == [] :| []

tails1 :: NonEmpty a -> NonEmpty (NonEmpty a) Исходный код

Функция tails1 принимает поток NonEmpty xs и возвращает все его непустые суффиксы xs, начиная с самого длинного.

tails1 (1 :| [2,3]) == (1 :| [2,3]) :| [2 :| [3], 3 :| []]
tails1 (1 :| []) == (1 :| []) :| []

Начиная с: base-4.18

append :: NonEmpty a -> NonEmpty a -> NonEmpty a Исходный код

Мономорфная версия <> для NonEmpty.

>>> append (1 :| []) (2 :| [3])
1 :| [2,3]

Начиная с: base-4.16

appendList :: NonEmpty a -> [a] -> NonEmpty a Исходный код

Добавляет список в конец NonEmpty.

>>> appendList (1 :| [2,3]) []
1 :| [2,3]
>>> appendList (1 :| [2,3]) [4,5]
1 :| [2,3,4,5]

Начиная с: base-4.16

prependList :: [a] -> NonEmpty a -> NonEmpty a Исходный код

Добавляет список в начало NonEmpty.

>>> prependList [] (1 :| [2,3])
1 :| [2,3]
>>> prependList [negate 1, 0] (1 :| [2, 3])
-1 :| [0,1,2,3]

Начиная с: base-4.16

Построение потоков

iterate :: (a -> a) -> a -> NonEmpty a Исходный код

iterate f x создаёт бесконечную последовательность повторных применений f к x.

iterate f x = x :| [f x, f (f x), ..]

repeat :: a -> NonEmpty a Исходный код

repeat x возвращает постоянный поток, в котором все элементы равны x.

cycle :: NonEmpty a -> NonEmpty a Исходный код

cycle xs возвращает бесконечное повторение xs:

cycle (1 :| [2,3]) = 1 :| [2,3,1,2,3,...]

unfold :: (a -> (b, Maybe a)) -> a -> NonEmpty b Исходный код

Устарело: используйте unfoldr

unfold создает новый поток, многократно применяя функцию развертывания к начальному значению, чтобы получить элемент типа b и новое начальное значение. Когда функция развертывания возвращает Nothing вместо нового начального значения, поток завершается.

insert :: (Foldable f, Ord a) => a -> f a -> NonEmpty a Исходный код

insert x xs вставляет x в последнюю позицию в xs, в которой он все еще меньше или равен следующему элементу. В частности, если список предварительно отсортирован, результат также будет отсортирован.

some1 :: Alternative f => f a -> f (NonEmpty a) Исходный код

some1 x выполняет последовательность x один или несколько раз.

Извлечение подсписков

take :: Int -> NonEmpty a -> [a] Исходный код

take n xs возвращает первые n элементов xs.

drop :: Int -> NonEmpty a -> [a] Исходный код

drop n xs удаляет первые n элементов из начала последовательности xs.

splitAt :: Int -> NonEmpty a -> ([a], [a]) Исходный код

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] Исходный код

takeWhile p xs возвращает самый длинный префикс потока xs, для которого выполняется предикат p.

dropWhile :: (a -> Bool) -> NonEmpty a -> [a] Исходный код

dropWhile p xs возвращает суффикс, оставшийся после takeWhile p xs.

span :: (a -> Bool) -> NonEmpty a -> ([a], [a]) Исходный код

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]) Исходный код

Функция break p эквивалентна span (not . p).

filter :: (a -> Bool) -> NonEmpty a -> [a] Исходный код

filter p xs удаляет из xs все элементы, не удовлетворяющие условию p.

partition :: (a -> Bool) -> NonEmpty a -> ([a], [a]) Исходный код

Функция 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] Исходный код

Функция group принимает поток и возвращает список потоков, при этом объединение элементов результирующего списка равно аргументу. Кроме того, каждый поток в результирующем списке содержит только равные элементы, а соседние равные элементы входных данных оказываются в одном потоке выходного списка. Например, в записи списков:

>>> group "Mississippi"
['M' :| "",'i' :| "",'s' :| "s",'i' :| "",'s' :| "s",'i' :| "",'p' :| "p",'i' :| ""]

groupBy :: Foldable f => (a -> a -> Bool) -> f a -> [NonEmpty a] Исходный код

groupBy работает как group, но использует предоставленный предикат равенства вместо ==.

groupWith :: (Foldable f, Eq b) => (a -> b) -> f a -> [NonEmpty a] Исходный код

groupWith работает как group, но при сравнении на равенство использует предоставленное проецирование

groupAllWith :: Ord b => (a -> b) -> [a] -> [NonEmpty a] Исходный код

groupAllWith работает как groupWith, но сначала сортирует список, чтобы в выходных данных для каждого класса эквивалентности было не более одного списка

group1 :: Eq a => NonEmpty a -> NonEmpty (NonEmpty a) Исходный код

group1 работает как group, но использует известный факт, что входные данные не пусты, чтобы гарантировать непустой результат.

groupBy1 :: (a -> a -> Bool) -> NonEmpty a -> NonEmpty (NonEmpty a) Исходный код

groupBy1 относится к group1 так же, как groupBy относится к group.

groupWith1 :: Eq b => (a -> b) -> NonEmpty a -> NonEmpty (NonEmpty a) Исходный код

groupWith1 относится к group1 так же, как groupWith относится к group

groupAllWith1 :: Ord b => (a -> b) -> NonEmpty a -> NonEmpty (NonEmpty a) Исходный код

groupAllWith1 относится к groupWith1 так же, как groupAllWith относится к groupWith

permutations :: [a] -> NonEmpty [a] Исходный код

Функция permutations возвращает список всех перестановок аргумента.

Начиная с: base-4.20.0.0

permutations1 :: NonEmpty a -> NonEmpty (NonEmpty a) Исходный код

permutations1 работает как permutations, но использует известный факт, что входные данные не пусты, чтобы получить результат, в котором каждый элемент непуст.

permutations1 = fmap fromList . permutations . toList

Начиная с: base-4.20.0.0

Предикаты подсписков

isPrefixOf :: Eq a => [a] -> NonEmpty a -> Bool Исходный код

Функция isPrefixOf возвращает True, если первый аргумент является префиксом второго.

Операции над «множествами»

nub :: Eq a => NonEmpty a -> NonEmpty a Исходный код

Функция nub удаляет из списка повторяющиеся элементы. В частности, она сохраняет только первое вхождение каждого элемента. (Название nub означает «сущность».) Это частный случай функции nubBy, которая позволяет программисту задать собственную проверку неравенства.

nubBy :: (a -> a -> Bool) -> NonEmpty a -> NonEmpty a Исходный код

Функция nubBy ведет себя так же, как nub, за исключением того, что использует заданный пользователем предикат равенства вместо перегруженной функции ==.

Индексация потоков

(!!) :: HasCallStack => NonEmpty a -> Int -> a infixl 9 Исходный код

xs !! n возвращает элемент потока xs с индексом n. Обратите внимание, что голова потока имеет индекс 0.

Внимание: отрицательный индекс или индекс за пределами диапазона вызовет ошибку.

Объединение и разделение потоков на пары

zip :: NonEmpty a -> NonEmpty b -> NonEmpty (a, b) Исходный код

Функция zip принимает два потока и возвращает поток соответствующих пар.

zipWith :: (a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c Исходный код

Функция zipWith является обобщением zip. Вместо объединения элементов в кортежи элементы комбинируются с помощью функции, переданной в качестве первого аргумента.

unzip :: NonEmpty (a, b) -> (NonEmpty a, NonEmpty b) Исходный код

Функция unzip является обратной к функции zip.

Преобразование списка и обратно

fromList :: HasCallStack => [a] -> NonEmpty a Исходный код

Преобразует обычный список в поток NonEmpty.

Вызывает ошибку, если передан пустой список.

toList :: NonEmpty a -> [a] Исходный код

Эффективно преобразует поток в обычный список.

nonEmpty :: [a] -> Maybe (NonEmpty a) Исходный код

nonEmpty эффективно преобразует обычный список в поток NonEmpty, возвращая Nothing, если входной список пуст.

xor :: NonEmpty Bool -> Bool Исходный код

Вычисляет операцию логического исключающего ИЛИ для n аргументов над списком NonEmpty.

© 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-List-NonEmpty.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API