summary refs log tree commit diff
path: root/lib/lists.nix
Commit message (Collapse)AuthorAge
* lib.lists: Use builtins.groupBy for lib.groupBySilvan Mosberger2022-03-18
| | | | | builtins.groupBy is much more performant. It was introduced in https://github.com/NixOS/nix/pull/5715
* lib/lists: mutuallyExclusive function optimizationpolykernel2021-11-01
| | | | | | | | | | | The current implementation of `mutuallyExclusive` builds a new list with length subtracted by one on every recursive call which is expensive. When b is empty, the function still traverses a in its entirety before returning a result. The new implementation uses `any` to check if each element of list b is in list a using `elem`. This maintains short circuiting when list a or b is empty and has a worst case time complexity of O(nm).
* lib: remove mention of flashplayer in docsBernardo Meurer2021-02-08
|
* Deprecate lib.crossListsJacek Galowicz2021-01-28
|
* lib.lists.unique: Switch from recursive function to using a foldadisbladis2020-11-24
| | | | | This improves performance by ~30-40% for smaller test cases and makes larger cases where my laptop would OOM pass in seconds.
* lib: Use Nix's static scope checking, fix error message, optimizeRobert Hensing2020-10-22
| | | | | | | | | | | | | | | | | | | Nix can perform static scope checking, but whenever code is inside a `with` expression, the analysis breaks down, because it can't know statically what's in the attribute set whose attributes were brought into scope. In those cases, Nix has to assume that everything works out. Except it doesnt. Removing `with` from lib/ revealed an undefined variable in an error message. If that doesn't convince you that we're better off without `with`, I can tell you that this PR results in a 3% evaluation performance improvement because Nix can look up local variables by index. This adds up with applications like the module system. Furthermore, removing `with` makes the binding site of each variable obvious, which helps with comprehension.
* fix example for foldlDrew Mullen2020-05-08
|
* Merge master into staging-nextFrederik Rietdijk2019-09-06
|\
| * Fix typo in lists.nixRobert Hensing2019-09-06
| |
* | Merge staging-next into stagingFrederik Rietdijk2019-08-28
|\|
| * rename foreach -> forEachdanbst2019-08-05
| |
| * lib: introduce `foreach` = flip mapdanbst2019-07-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The main purpose is to bring attention to `flip map`, which improves code readablity. It is useful when ad-hoc anonymous function grows two or more lines in `map` application: ``` map (lcfg: let port = lcfg.port; portStr = if port != defaultPort then ":${toString port}" else ""; scheme = if cfg.enableSSL then "https" else "http"; in "${scheme}://cfg.hostName${portStr}" ) (getListen cfg); ``` Compare this to `foreach`-style: ``` foreach (getListen cfg) (lcfg: let port = lcfg.port; portStr = if port != defaultPort then ":${toString port}" else ""; scheme = if cfg.enableSSL then "https" else "http"; in "${scheme}://cfg.hostName${portStr}" ); ``` This is similar to Haskell's `for` (http://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Traversable.html#v:for)
* | treewide: remove redundant quotesvolth2019-08-26
|/
* lib: improve the implementation of the unique functionLéo Gaspard2019-04-12
|
* lib: lists: Alias builtins.mapMatthias Beyer2019-03-29
| | | | | Signed-off-by: Matthias Beyer <mail@beyermatthias.de> Suggested-by: Profpatsch <mail@profpatsch.de>
* lib/lists: Update documentation comments for doc generationVincent Ambo2018-10-29
| | | | | | | Updates documentation comments with extra information for nixdoc[1] compatibility. [1]: https://github.com/tazjin/nixdoc
* lib: move assertMsg and assertOneOf to their own library fileProfpatsch2018-09-06
| | | | | Since the `assertOneOf` uses `lib.generators`, they are not really trivial anymore and should go into their own library file.
* lib/trivial: add a few examples of usage of assertMsg/assertOneOfProfpatsch2018-09-06
|
* [bot]: remove unreferenced codevolth2018-07-20
|
* lib.concatMap and lib.mapAttrs to be builtinsvolth2018-07-05
|
* lib: add groupBy (#38612)volth2018-06-10
|
* lib: add naturalSort (move the example IPs to private space)volth2018-04-08
|
* lib: add naturalSortvolth2018-04-08
|
* Merge pull request #33898 from oxij/nixos/related-packages-v5Graham Christensen2018-02-09
|\ | | | | nixos: doc: implement related packages in the manual (again)
| * lib: implement `compare`, `splitByAndCompare`, and `compareLists`Jan Malakhovski2018-02-09
| |
* | nixos/tests: add predictable-interface-names.nix (#34305)symphorien2018-02-09
|/
* Revert "nixos: doc: implement related packages in the manual"Graham Christensen2017-12-23
|
* lib: implement `compare`, `splitByAndCompare`, and `compareLists`Jan Malakhovski2017-12-07
|
* Convert libs to a fixed-pointGraham Christensen2017-09-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This does break the API of being able to import any lib file and get its libs, however I'm not sure people did this. I made this while exploring being able to swap out docFn with a stub in #2305, to avoid functor performance problems. I don't know if that is going to move forward (or if it is a problem or not,) but after doing all this work figured I'd put it up anyway :) Two notable advantages to this approach: 1. when a lib inherits another lib's functions, it doesn't automatically get put in to the scope of lib 2. when a lib implements a new obscure functions, it doesn't automatically get put in to the scope of lib Using the test script (later in this commit) I got the following diff on the API: + diff master fixed-lib 11764a11765,11766 > .types.defaultFunctor > .types.defaultTypeMerge 11774a11777,11778 > .types.isOptionType > .types.isType 11781a11786 > .types.mkOptionType 11788a11794 > .types.setType 11795a11802 > .types.types This means that this commit _adds_ to the API, however I can't find a way to fix these last remaining discrepancies. At least none are _removed_. Test script (run with nix-repl in the PATH): #!/bin/sh set -eux repl() { suff=${1:-} echo "(import ./lib)$suff" \ | nix-repl 2>&1 } attrs_to_check() { repl "${1:-}" \ | tr ';' $'\n' \ | grep "\.\.\." \ | cut -d' ' -f2 \ | sed -e "s/^/${1:-}./" \ | sort } summ() { repl "${1:-}" \ | tr ' ' $'\n' \ | sort \ | uniq } deep_summ() { suff="${1:-}" depth="${2:-4}" depth=$((depth - 1)) summ "$suff" for attr in $(attrs_to_check "$suff" | grep -v "types.types"); do if [ $depth -eq 0 ]; then summ "$attr" | sed -e "s/^/$attr./" else deep_summ "$attr" "$depth" | sed -e "s/^/$attr./" fi done } ( cd nixpkgs #git add . #git commit -m "Auto-commit, sorry" || true git checkout fixed-lib deep_summ > ../fixed-lib git checkout master deep_summ > ../master ) if diff master fixed-lib; then echo "SHALLOW MATCH!" fi ( cd nixpkgs git checkout fixed-lib repl .types )
* lib.lists.mutuallyExclusive: add functionVladimír Čunát2017-07-07
|
* lib: introduce imap0, imap1 (#25543)zimbatm2017-07-04
| | | | | | | | | | | | | | | | * lib: introduce imap0, imap1 For historical reasons, imap starts counting at 1 and it's not consistent with the rest of the lib. So for now we split imap into imap0 that starts counting at zero and imap1 that starts counting at 1. And imap is marked as deprecated. See https://github.com/NixOS/nixpkgs/commit/c71e2d42359f9900ea2c290d141c0d606471da16#commitcomment-21873221 * replace uses of lib.imap * lib: move imap to deprecated.nix
* lib: trivial spelling fixesTom Saeger2017-04-19
|
* lib/lists: rename fold to foldr & improve fold docsProfpatsch2017-03-19
| | | | | | | In order to better distinguish foldr from foldl the default name is changed to foldr, but fold is still a synonym. Additionally the docs are improved and examples added.
* Use builtins.partition if availableEelco Dolstra2016-08-29
|
* lib: introduce listDfs and toposort, add example to hasPrefixJan Malakhovski2016-08-23
|
* flatten: drastically improve performance, see #17626Domen Kožar2016-08-10
|
* Really remove library functionsEelco Dolstra2016-07-11
| | | | | Throwing a message like "removed 2016-02-29 because unused and broken" is unhelpful because it doesn't show what function was removed.
* Remove unecessary branching on old nix versionszimbatm2016-06-17
| | | | | All these builtins are available since 1.10 or earlier (1.10 being the lib/minver.nix)
* lib.lists: fix fold exampleDomen Kožar2016-05-26
|
* lib/lists: document all functionszimbatm2016-03-10
|
* Remove lib.deepSeqList and lib.deepSeqAttrszimbatm2016-03-09
| | | | Both functions are broken and unused in the repo.
* Use builtins.sortEelco Dolstra2015-07-28
|
* Use builtins.genListEelco Dolstra2015-07-28
| | | | This fixes the quadratic complexity of functions like imap.
* Remove zipTwoListsEelco Dolstra2015-07-28
| | | | This function is redundant (we also have zipLists).
* Use builtin all and any functionsEelco Dolstra2015-07-24
|
* Use foldl' instead of fold in some placesEelco Dolstra2015-07-23
|
* Revert "Reverts a bunch of commits as a try to fix GC errors."Jaka Hudoklin2015-03-21
| | | | | | | This reverts commit 1e4ba025c260fa6852765e9f5c59e985f10c6a43. Conflicts: pkgs/development/web/nodejs/build-node-package.nix
* Reverts a bunch of commits as a try to fix GC errors.Domen Kožar2015-03-17
| | | | | | | | | Commits - 694f01db2d2e1cde06ee243a5909d196e84f0a18 - 829479d1dda5dbb579885e16dc655716127457ed - bd81885f706dae5cdeb8c03845fa43d8b74fa57c - b2fdcf801ce08bf0c44e63bafe8ae2c720704da7
* intersect -> intersectLists, subtract -> subtractListsEelco Dolstra2015-03-04
|
* substract -> subtractEelco Dolstra2015-03-04
|