HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

ModuleAgda-2.7.0.1Haskell2010

Agda.Utils.List1

Non-empty lists.

Better name List1 for non-empty lists, plus missing functionality.

Import: @

{-# LANGUAGE PatternSynonyms #-}

import Agda.Utils.List1 (List1, pattern (:|)) import qualified Agda.Utils.List1 as List1

@

  • 3 types
  • 1 class
  • 98 values
  • PackageAgda-2.7.0.1
  • Exports103
  • LanguageHaskell2010
  • LicenceMIT
  • SourceList1.hs
valueinitLast :: List1 a -> ([a], a)
#

Return the last element and the rest.

valuesnoc :: [a] -> a -> List1 a
#

Build a list with one element.

More precise type for snoc.

valueupdateHead :: (a -> a) -> List1 a -> List1 a
#

Update the first element of a non-empty list. O(1).

valueupdateLast :: (a -> a) -> List1 a -> List1 a
#

Update the last element of a non-empty list. O(n).

valueconcat :: [List1 a] -> [a]
#

Concatenate one or more non-empty lists.

valuefoldr :: (a -> b -> b) -> (a -> b) -> List1 a -> b
#

List Data.List.foldr but with a base case for the singleton list.

valuebreakAfter :: (a -> Bool) -> List1 a -> (List1 a, [a])
#

Breaks a list just after an element satisfying the predicate is found.

Example1 expression
breakAfter even [1,3,5,2,4,7,8](1 :| [3,5,2],[4,7,8])
valueallEqual :: Eq a => List1 a -> Bool
#

Checks if all the elements in the list are equal. Assumes that the Eq instance stands for an equivalence relation. O(n).

valuewordsBy :: (a -> Bool) -> [a] -> [List1 a]
#

Split a list into sublists. Generalisation of the prelude function words. Same as Data.List.Split.wordsBy and Data.List.Extra.wordsBy, but with the non-emptyness guarantee on the chunks. O(n).

words xs == wordsBy isSpace xs
valueliftList1 :: (List1 a -> List1 b) -> [a] -> [b]
#

Lift a function on non-empty lists to a function on lists.

This is in essence fmap for Maybe, if we take [a] = Maybe (List1 a).

valuefromListSafe
  1. :: List1 a

    Default value if convertee is empty.

  2. -> [a]

    List to convert, supposedly non-empty.

  3. -> List1 a

    Converted list.

#

Safe version of fromList.

valuegroupBy' :: (a -> a -> Bool) -> [a] -> [List1 a]
#

More precise type for Agda.Utils.List.groupBy'.

A variant of groupBy which applies the predicate to consecutive pairs. O(n).

valuegroupByFst :: Eq a => [(a, b)] -> [(a, List1 b)]
#

Group consecutive items that share the same first component.

valuegroup :: (Foldable f, Eq a) => f a -> [NonEmpty a]
#

The group function takes a stream and returns a list of streams such that flattening the resulting list is equal to the argument. Moreover, each stream in the resulting list contains only equal elements, and consecutive equal elements of the input end up in the same stream of the output list. For example, in list notation:

Example1 expression
group "Mississippi"["M", "i", "ss", "i", "ss", "i", "pp", "i"]
value(!!) :: HasCallStack => NonEmpty a -> Int -> a
#

xs !! n returns the element of the stream xs at index n. Note that the head of the stream has index 0.

Beware: a negative or out-of-bounds index will cause an error.

datadata NonEmpty a
#

Non-empty (and non-strict) list type.

Constructors

  • a :| [a]infixr 5
Instances86Monad, Functor, MonadFix, IsString, Applicative, Foldable, …
valuepartition :: (a -> Bool) -> NonEmpty a -> ([a], [a])
#

The partition function takes a predicate p and a stream xs, and returns a pair of lists. The first list corresponds to the elements of xs for which p holds; the second corresponds to the elements of xs for which p does not hold.

'partition' p xs = ('filter' p xs, 'filter' (not . p) xs)
valueinsert :: (Foldable f, Ord a) => a -> f a -> NonEmpty a
#

insert x xs inserts x into the last position in xs where it is still less than or equal to the next element. In particular, if the list is sorted beforehand, the result will also be sorted.

valuesortOn :: Ord b => (a -> b) -> NonEmpty a -> NonEmpty a
#

Sort a NonEmpty on a user-supplied projection of its elements. See sortOn for more detailed information.

Examples
Example1 expression
sortOn fst $ (2, "world") :| [(4, "!"), (1, "Hello")](1,"Hello") :| [(2,"world"),(4,"!")]
Example1 expression
sortOn length $ "jim" :| ["creed", "pam", "michael", "dwight", "kevin"]"jim" :| ["pam","creed","kevin","dwight","michael"]
Performance notes

This function minimises the projections performed, by materialising the projections in an intermediate list.

For trivial projections, you should prefer using sortBy with comparing, for example:

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

Or, for the exact same API as sortOn, you can use `sortBy . comparing`:

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

sortWith is an alias for `sortBy . comparing`.

valuehead :: NonEmpty a -> a
#

Extract the first element of the stream.

valuetails :: Foldable f => f a -> NonEmpty [a]
#

The tails function takes a stream xs and returns all the suffixes of xs, starting with the longest. The result is NonEmpty because the result always contains the empty list as the last element.

tails [1,2,3] == [1,2,3] :| [[2,3], [3], []]
tails [1] == [1] :| [[]]
tails [] == [] :| []
valuedrop :: Int -> NonEmpty a -> [a]
#

drop n xs drops the first n elements off the front of the sequence xs.

valuesplitAt :: Int -> NonEmpty a -> ([a], [a])
#

splitAt n xs returns a pair consisting of the prefix of xs of length n and the remaining stream immediately following this prefix.

'splitAt' n xs == ('take' n xs, 'drop' n xs)
xs == ys ++ zs where (ys, zs) = 'splitAt' n xs
valueinit :: NonEmpty a -> [a]
#

Extract everything except the last element of the stream.

valueiterate :: (a -> a) -> a -> NonEmpty a
#

iterate f x produces the infinite sequence of repeated applications of f to x.

iterate f x = x :| [f x, f (f x), ..]
valuelast :: NonEmpty a -> a
#

Extract the last element of the stream.

valuerepeat :: a -> NonEmpty a
#

repeat x returns a constant stream, where all elements are equal to x.

valuescanl :: Foldable f => (b -> a -> b) -> b -> f a -> NonEmpty b
#

scanl is similar to foldl, but returns a stream of successive reduced values from the left:

scanl f z [x1, x2, ...] == z :| [z `f` x1, (z `f` x1) `f` x2, ...]

Note that

last (scanl f z xs) == foldl f z xs.
valuescanl1 :: (a -> a -> a) -> NonEmpty a -> NonEmpty a
#

scanl1 is a variant of scanl that has no starting value argument:

scanl1 f [x1, x2, ...] == x1 :| [x1 `f` x2, x1 `f` (x2 `f` x3), ...]
valuescanr :: Foldable f => (a -> b -> b) -> b -> f a -> NonEmpty b
#

scanr is the right-to-left dual of scanl. Note that

head (scanr f z xs) == foldr f z xs.
valuespan :: (a -> Bool) -> NonEmpty a -> ([a], [a])
#

span p xs returns the longest prefix of xs that satisfies p, together with the remainder of the stream.

'span' p xs == ('takeWhile' p xs, 'dropWhile' p xs)
xs == ys ++ zs where (ys, zs) = 'span' p xs
valuetail :: NonEmpty a -> [a]
#

Extract the possibly-empty tail of the stream.

valuezipWith :: (a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c
#

The zipWith function generalizes zip. Rather than tupling the elements, the elements are combined using the function passed as the first argument.

valueinits :: Foldable f => f a -> NonEmpty [a]
#

The inits function takes a stream xs and returns all the finite prefixes of xs, starting with the shortest. The result is NonEmpty because the result always contains the empty list as the first element.

inits [1,2,3] == [] :| [[1], [1,2], [1,2,3]]
inits [1] == [] :| [[1]]
inits [] == [] :| []
valueintersperse :: a -> NonEmpty a -> NonEmpty a
#

'intersperse x xs' alternates elements of the list with copies of x.

intersperse 0 (1 :| [2,3]) == 1 :| [0,2,0,3]
valuenub :: Eq a => NonEmpty a -> NonEmpty a
#

The nub function removes duplicate elements from a list. In particular, it keeps only the first occurrence of each element. (The name nub means 'essence'.) It is a special case of nubBy, which allows the programmer to supply their own inequality test.

valuenubBy :: (a -> a -> Bool) -> NonEmpty a -> NonEmpty a
#

The nubBy function behaves just like nub, except it uses a user-supplied equality predicate instead of the overloaded == function.

valueunfold :: (a -> (b, Maybe a)) -> a -> NonEmpty b
#

Deprecated. Use unfoldr

unfold produces a new stream by repeatedly applying the unfolding function to the seed value to produce an element of type b and a new seed value. When the unfolding function returns Nothing instead of a new seed value, the stream ends.

valueappendList :: NonEmpty a -> [a] -> NonEmpty a
#

Attach a list at the end of a NonEmpty.

Example1 expression
appendList (1 :| [2,3]) []1 :| [2,3]
Example1 expression
appendList (1 :| [2,3]) [4,5]1 :| [2,3,4,5]
valueinits1 :: NonEmpty a -> NonEmpty (NonEmpty a)
#

The inits1 function takes a NonEmpty stream xs and returns all the NonEmpty finite prefixes of xs, starting with the shortest.

inits1 (1 :| [2,3]) == (1 :| []) :| [1 :| [2], 1 :| [2,3]]
inits1 (1 :| []) == (1 :| []) :| []
valueprependList :: [a] -> NonEmpty a -> NonEmpty a
#

Attach a list at the beginning of a NonEmpty.

Example1 expression
prependList [] (1 :| [2,3])1 :| [2,3]
Example1 expression
prependList [negate 1, 0] (1 :| [2, 3])-1 :| [0,1,2,3]
valuetails1 :: NonEmpty a -> NonEmpty (NonEmpty a)
#

The tails1 function takes a NonEmpty stream xs and returns all the non-empty suffixes of xs, starting with the longest.

tails1 (1 :| [2,3]) == (1 :| [2,3]) :| [2 :| [3], 3 :| []]
tails1 (1 :| []) == (1 :| []) :| []
classclass IsList l where
#

The IsList class and its methods are intended to be used in conjunction with the OverloadedLists extension.

Associated types

  • type family Item l

    The Item type function returns the type of items of the structure l.

Methods

  • fromList :: [Item l] -> l

    The fromList function constructs the structure l from the given list of Item l

  • fromListN :: Int -> [Item l] -> l

    The fromListN function takes the input list's length and potentially uses it to construct the structure l more efficiently compared to fromList. If the given number does not equal to the input list's length the behaviour of fromListN is not specified.

    Property
    fromListN (length xs) xs == fromList xs
  • toList :: l -> [Item l]

    The toList function extracts a list of Item l from the structure l. It should satisfy fromList . toList = id.

Instances32IsList, …
  • IsList ByteArrayDefined in base-4.20.2.0 · Data.Array.Byte
  • IsList BuilderDefined in bytestring-0.12.2.0 · Data.ByteString.Builder.Internal

    For long or infinite lists use fromList because it uses LazyByteString otherwise use fromListN which uses StrictByteString.

  • IsList ByteStringDefined in bytestring-0.12.2.0 · Data.ByteString.Internal.Type
  • IsList ByteStringDefined in bytestring-0.12.2.0 · Data.ByteString.Lazy.Internal
  • IsList ShortByteStringDefined in bytestring-0.12.2.0 · Data.ByteString.Short.Internal
  • IsList IntSetDefined in containers-0.7 · Data.IntSet.Internal
  • IsList VersionDefined in ghc-internal-9.1003.0 · GHC.Internal.IsList
  • IsList CallStackDefined in ghc-internal-9.1003.0 · GHC.Internal.IsList

    Be aware that 'fromList . toList = id' only for unfrozen CallStacks, since toList removes frozenness information.

  • IsList TextDefined in text-2.1.3 · Data.Text · orphan

    Performs replacement on invalid scalar values:

    Example2 expressions
    :set -XOverloadedLists['\55555'] :: Text"\65533"
  • IsList TextDefined in text-2.1.3 · Data.Text.Lazy · orphan

    Performs replacement on invalid scalar values:

    Example2 expressions
    :set -XOverloadedLists['\55555'] :: Data.Text.Lazy.Text"\65533"
  • IsList ShortTextDefined in text-short-0.1.6 · Data.Text.Short.Internal

    Note: Surrogate pairs ([U+D800 .. U+DFFF]) character literals are replaced by U+FFFD.

  • Storable a => IsList (Vector a)Defined in vector-0.13.2.0 · Data.Vector.Storable
  • IsList (List2 a)Defined in Agda-2.7.0.1 · Agda.Utils.List2

    fromList is unsafe.

  • IsList (KeyMap v)Defined in aeson-2.2.3.0 · Data.Aeson.KeyMap
  • IsList (IntMap a)Defined in containers-0.7 · Data.IntMap.Internal
  • IsList (Seq a)Defined in containers-0.7 · Data.Sequence.Internal
  • IsList (DNonEmpty a)Defined in dlist-1.0 · Data.DList.DNonEmpty.Internal
  • IsList (DList a)Defined in dlist-1.0 · Data.DList.Internal
  • IsList (NonEmpty a)Defined in ghc-internal-9.1003.0 · GHC.Internal.IsList
  • IsList (ZipList a)Defined in ghc-internal-9.1003.0 · GHC.Internal.IsList
  • IsList (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • IsList (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArray
  • IsList (Vector a)Defined in vector-0.13.2.0 · Data.Vector
  • IsList (Vector a)Defined in vector-0.13.2.0 · Data.Vector.Strict
  • IsList [a]Defined in ghc-internal-9.1003.0 · GHC.Internal.IsList
  • Ord a => IsList (Set a)Defined in containers-0.7 · Data.Set.Internal
  • Hashable a => IsList (HashSet a)Defined in unordered-containers-0.2.21 · Data.HashSet.Internal
  • Prim a => IsList (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • Prim a => IsList (Vector a)Defined in vector-0.13.2.0 · Data.Vector.Primitive
  • Unbox e => IsList (Vector e)Defined in vector-0.13.2.0 · Data.Vector.Unboxed · orphan
  • Ord k => IsList (Map k v)Defined in containers-0.7 · Data.Map.Internal
  • Hashable k => IsList (HashMap k v)Defined in unordered-containers-0.2.21 · Data.HashMap.Internal
familytype family Item l
#

The Item type function returns the type of items of the structure l.

Instances32Item, …
  • type Item ByteArray = Word8Defined in base-4.20.2.0 · Data.Array.Byte
  • type Item Builder = Word8Defined in bytestring-0.12.2.0 · Data.ByteString.Builder.Internal
  • type Item ByteString = Word8Defined in bytestring-0.12.2.0 · Data.ByteString.Internal.Type
  • type Item ByteString = Word8Defined in bytestring-0.12.2.0 · Data.ByteString.Lazy.Internal
  • type Item ShortByteString = Word8Defined in bytestring-0.12.2.0 · Data.ByteString.Short.Internal
  • type Item IntSet = KeyDefined in containers-0.7 · Data.IntSet.Internal
  • type Item Version = IntDefined in ghc-internal-9.1003.0 · GHC.Internal.IsList
  • type Item CallStack = (String, SrcLoc)Defined in ghc-internal-9.1003.0 · GHC.Internal.IsList
  • type Item Text = CharDefined in text-2.1.3 · Data.Text · orphan
  • type Item Text = CharDefined in text-2.1.3 · Data.Text.Lazy · orphan
  • type Item ShortText = CharDefined in text-short-0.1.6 · Data.Text.Short.Internal
  • type Item (List2 a) = aDefined in Agda-2.7.0.1 · Agda.Utils.List2
  • type Item (KeyMap v) = (Key, v)Defined in aeson-2.2.3.0 · Data.Aeson.KeyMap
  • type Item (IntMap a) = (Key, a)Defined in containers-0.7 · Data.IntMap.Internal
  • type Item (Map k v) = (k, v)Defined in containers-0.7 · Data.Map.Internal
  • type Item (Seq a) = aDefined in containers-0.7 · Data.Sequence.Internal
  • type Item (Set a) = aDefined in containers-0.7 · Data.Set.Internal
  • type Item (DNonEmpty a) = aDefined in dlist-1.0 · Data.DList.DNonEmpty.Internal
  • type Item (DList a) = aDefined in dlist-1.0 · Data.DList.Internal
  • type Item (NonEmpty a) = aDefined in ghc-internal-9.1003.0 · GHC.Internal.IsList
  • type Item (ZipList a) = aDefined in ghc-internal-9.1003.0 · GHC.Internal.IsList
  • type Item (Array a) = aDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • type Item (PrimArray a) = aDefined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • type Item (SmallArray a) = aDefined in primitive-0.9.1.0 · Data.Primitive.SmallArray
  • type Item (HashMap k v) = (k, v)Defined in unordered-containers-0.2.21 · Data.HashMap.Internal
  • type Item (HashSet a) = aDefined in unordered-containers-0.2.21 · Data.HashSet.Internal
  • type Item (Vector a) = aDefined in vector-0.13.2.0 · Data.Vector
  • type Item (Vector a) = aDefined in vector-0.13.2.0 · Data.Vector.Primitive
  • type Item (Vector a) = aDefined in vector-0.13.2.0 · Data.Vector.Storable
  • type Item (Vector a) = aDefined in vector-0.13.2.0 · Data.Vector.Strict
  • type Item (Vector e) = eDefined in vector-0.13.2.0 · Data.Vector.Unboxed · orphan
  • type Item [a] = aDefined in ghc-internal-9.1003.0 · GHC.Internal.IsList
valueunzip :: Functor f => f (a, b) -> (f a, f b)
#

Generalization of Data.List.unzip.

Examples
Example1 expression
unzip (Just ("Hello", "World"))(Just "Hello",Just "World")
Example1 expression
unzip [("I", "love"), ("really", "haskell")](["I","really"],["love","haskell"])