v-nys / elm-nonempty-list / List.Nonempty.Extra

Various helper functions, perhaps too specialized for frequent use

Basics

unique : List.Nonempty.ListNonempty comparable -> List.Nonempty.ListNonempty comparable

Similar to List.Extra.unique

fromPair 0 [ 1, 0, 2 ] |> unique == fromPair 0 [ 1, 2 ]

uniqueBy : (a -> comparable) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.Extra.uniqueBy

setIf : (a -> Basics.Bool) -> a -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.Extra.setIf

setAt : Basics.Int -> a -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.Extra.setAt

setIfIndex : (Basics.Int -> Basics.Bool) -> a -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

List.Extra.setIf meets List.Extra.updateIfIndex

updateIf : (a -> Basics.Bool) -> (a -> a) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.Extra.updateIf

updateAt : Basics.Int -> (a -> a) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.Extra.updateAt

updateIfIndex : (Basics.Int -> Basics.Bool) -> (a -> a) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.Extra.updateIfIndex

swapAt : Basics.Int -> Basics.Int -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.Extra.swapAt

maximumBy : (a -> comparable) -> List.Nonempty.ListNonempty a -> a

Similar to List.Extra.maximumBy

maximumWith : (a -> a -> Basics.Order) -> List.Nonempty.ListNonempty a -> a

Similar to List.Extra.maximumWith

minimumBy : (a -> comparable) -> List.Nonempty.ListNonempty a -> a

Similar to List.Extra.minimumBy

minimumWith : (a -> a -> Basics.Order) -> List.Nonempty.ListNonempty a -> a

Similar to List.Extra.minimumWith

List transformations

intersperse : a -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.intersperse

intersperse "." (fromPair "127" [ "0", "0", "1" ])
    |> toList
    == [ "127", ".", "0", ".", "0", ".", "1" ]

transpose : List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a) -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.transpose

subsequences : List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.subsequences

permutations : List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.permutations

Folds

indexedFoldl : (Basics.Int -> a -> b -> b) -> b -> List.Nonempty.ListNonempty a -> b

Similar to List.Extra.indexedFoldl

indexedFoldr : (Basics.Int -> a -> b -> b) -> b -> List.Nonempty.ListNonempty a -> b

Similar to List.Extra.indexedFoldr

Building lists

scanl : (a -> b -> b) -> b -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty b

Similar to List.Extra.scanl

scanlList : (a -> b -> b) -> b -> List a -> List.Nonempty.ListNonempty b

Similar to scanl, except takes a List as input. Output is still guaranteed to be non-empty.

scanl1 : (a -> a -> a) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.Extra.scanl1 except doesn't need to return a Maybe. The function is (a -> a -> a) though, instead of (a -> b -> b).

scanr : (a -> b -> b) -> b -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty b

Similar to List.Extra.scanr

scanrList : (a -> b -> b) -> b -> List a -> List.Nonempty.ListNonempty b

Similar to scanr, except takes a List as input. Output is still guaranteed to be non-empty.

scanr1 : (a -> a -> a) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to List.Extra.scanr1 except doesn't need to return a Maybe. The function is (a -> a -> a) though, instead of (a -> b -> b).

mapAccuml : (a -> b -> ( a, c )) -> a -> List.Nonempty.ListNonempty b -> ( a, List.Nonempty.ListNonempty c )

Similar to List.Extra.mapAccuml

mapAccumr : (a -> b -> ( a, c )) -> a -> List.Nonempty.ListNonempty b -> ( a, List.Nonempty.ListNonempty c )

Similar to List.Extra.mapAccumr

iterate : (a -> Maybe a) -> a -> List.Nonempty.ListNonempty a

Similar to List.Extra.iterate

initialize : Basics.Int -> (Basics.Int -> a) -> List.Nonempty.ListNonempty a

Similar to List.Extra.initialize.

appendList : List.Nonempty.ListNonempty a -> List a -> List.Nonempty.ListNonempty a

Similar to append, except taking an ordinary list as second argument.

appendList (fromPair 0 [ 1, 2 ]) [ 3, 4, 5 ]
    |> toList
    == [ 0, 1, 2, 3, 4, 5 ]

prependList : List a -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty a

Similar to append, except taking an ordinary list as first argument.

appendList (fromPair 0 [ 1, 2 ]) [ 3, 4, 5 ]
    |> toList
    == [ 0, 1, 2, 3, 4, 5 ]

Sublists

splitAtTail : Basics.Int -> List.Nonempty.ListNonempty a -> ( List.Nonempty.ListNonempty a, List a )

Similar to List.Extra.splitAt. Compare with splitAtRest.

splitAtRest : Basics.Int -> List.Nonempty.ListNonempty a -> ( List a, List.Nonempty.ListNonempty a )

Similar to List.Extra.splitAt. Compare with splitAtTail.

group : List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.group.

groupList : List a -> List (List.Nonempty.ListNonempty a)

Similar to group, but works on List.

groupWhile : (a -> a -> Basics.Bool) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.groupWhile.

groupWhileList : (a -> a -> Basics.Bool) -> List a -> List (List.Nonempty.ListNonempty a)

Similar to groupWhile, but works on List.

prefixes : List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.inits.

suffixes : List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.tails.

select : List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty ( a, List a )

Similar to List.Extra.select. Output type was chosen because the output of this function is likely intended to be used as separate pieces. If output type of ListNonempty (ListNonempty a) is desired, use select >> map fromTuple.

selectSplit : List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty ( List a, a, List a )

Similar to List.Extra.selectSplit.

gatherEquals : List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.gatherEquals.

gatherEqualsBy : (a -> b) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.gatherEqualsBy.

gatherEqualsByList : (a -> b) -> List a -> List (List.Nonempty.ListNonempty a)

Similar to gatherEqualsBy, except operating on List.

gatherEqualsList : List a -> List (List.Nonempty.ListNonempty a)

Similar to gatherEquals except operating on List.

gatherWith : (a -> a -> Basics.Bool) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.gatherWith.

gatherWithList : (a -> a -> Basics.Bool) -> List a -> List (List.Nonempty.ListNonempty a)

Similar to gatherWith, except operating on List.

frequencies : List.Nonempty.ListNonempty comparable -> List.Nonempty.ListNonempty ( comparable, Basics.Int )

Similar to List.Extra.frequencies.

partition : (a -> Basics.Bool) -> List.Nonempty.ListNonempty a -> ( List a, List a )

Equivalent to List.partition. We can't have any (simple) guarantees about the lengths of the two returned lists.

fromPair 2 [ 5, 1, 4 ]
    |> partition (\n -> n > 2)
    == ( [ 5, 4 ], [ 2, 1 ] )

Searching

notMember : a -> List.Nonempty.ListNonempty a -> Basics.Bool

Similar to List.Extra.notMember.

Lift

lift2 : (a -> b -> c) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty b -> List.Nonempty.ListNonempty c

Similar to List.Extra.lift2.

lift3 : (a -> b -> c -> d) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty b -> List.Nonempty.ListNonempty c -> List.Nonempty.ListNonempty d

Similar to List.Extra.lift3.

lift4 : (a -> b -> c -> d -> e) -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty b -> List.Nonempty.ListNonempty c -> List.Nonempty.ListNonempty d -> List.Nonempty.ListNonempty e

Similar to List.Extra.lift4.

Split to groups

groupsOf : Basics.Int -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.groupsOf.

groupsOfWithStep : Basics.Int -> Basics.Int -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.groupsOfWithStep.

groupsOfVarying : List.Nonempty.ListNonempty Basics.Int -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.groupsOfVarying.

greedyGroupsOf : Basics.Int -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.greedyGroupsOf.

greedyGroupsOfWithStep : Basics.Int -> Basics.Int -> List.Nonempty.ListNonempty a -> List.Nonempty.ListNonempty (List.Nonempty.ListNonempty a)

Similar to List.Extra.greedyGroupsOfWithStep.