Eliminate some calls to ‘tail’
This commit is contained in:
parent
431c55cbf1
commit
c0a483632c
5 changed files with 12 additions and 12 deletions
|
@ -169,11 +169,11 @@ rec {
|
|||
# order. The implementation does a quick-sort.
|
||||
sort = strictLess: list:
|
||||
let
|
||||
# This implementation only have one element lists on the left hand
|
||||
# This implementation only has one element list on the left hand
|
||||
# side of the concatenation operator.
|
||||
qs = l: concat:
|
||||
if l == [] then concat
|
||||
else if tail l == [] then l ++ concat
|
||||
else if length l == 1 then l ++ concat
|
||||
else let
|
||||
part = partition (strictLess (head l)) (tail l);
|
||||
in
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
let lib = import ./default.nix; in
|
||||
|
||||
with { inherit (builtins) head tail; };
|
||||
with { inherit (builtins) head; };
|
||||
with import ./trivial.nix;
|
||||
with import ./lists.nix;
|
||||
with import ./misc.nix;
|
||||
|
@ -64,7 +64,7 @@ rec {
|
|||
config = getConfig;
|
||||
} // (
|
||||
if getImportedSets != [] then
|
||||
assert tail getImportedSets == [];
|
||||
assert length getImportedSets == 1;
|
||||
{ options = head getImportedSets; }
|
||||
else
|
||||
{}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
let lib = import ./default.nix; in
|
||||
|
||||
with { inherit (builtins) head tail; };
|
||||
with { inherit (builtins) head length; };
|
||||
with import ./trivial.nix;
|
||||
with import ./lists.nix;
|
||||
with import ./misc.nix;
|
||||
|
@ -133,7 +133,7 @@ rec {
|
|||
# separate the merge & apply fields from the interface.
|
||||
mergeOptionDecls = opts:
|
||||
if opts == [] then {}
|
||||
else if tail opts == [] then
|
||||
else if length opts == 1 then
|
||||
let opt = head opts; in
|
||||
if opt ? options then
|
||||
opt // { options = toList opt.options; }
|
||||
|
@ -189,7 +189,7 @@ rec {
|
|||
) (attrNames defs));
|
||||
|
||||
mergeDefaultOption = list:
|
||||
if list != [] && tail list == [] then head list
|
||||
if length list == 1 then head list
|
||||
else if all builtins.isFunction list then x: mergeDefaultOption (map (f: f x) list)
|
||||
else if all isList list then concatLists list
|
||||
else if all isAttrs list then fold lib.mergeAttrs {} list
|
||||
|
@ -214,7 +214,7 @@ rec {
|
|||
|
||||
mergeOneOption = list:
|
||||
if list == [] then abort "This case should never happen."
|
||||
else if tail list != [] then throw "Multiple definitions. Only one is allowed for this option."
|
||||
else if length list != 1 then throw "Multiple definitions. Only one is allowed for this option."
|
||||
else head list;
|
||||
|
||||
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
let lib = import ./default.nix;
|
||||
|
||||
inherit (builtins) add sub lessThan;
|
||||
inherit (builtins) add sub lessThan length;
|
||||
|
||||
in
|
||||
|
||||
rec {
|
||||
inherit (builtins) stringLength substring head tail lessThan sub;
|
||||
inherit (builtins) stringLength substring head tail;
|
||||
|
||||
|
||||
# Concatenate a list of strings.
|
||||
|
@ -22,7 +22,7 @@ rec {
|
|||
# Place an element between each element of a list, e.g.,
|
||||
# `intersperse "," ["a" "b" "c"]' returns ["a" "," "b" "," "c"].
|
||||
intersperse = separator: list:
|
||||
if list == [] || tail list == []
|
||||
if list == [] || length list == 1
|
||||
then list
|
||||
else [(head list) separator]
|
||||
++ (intersperse separator (tail list));
|
||||
|
|
|
@ -157,7 +157,7 @@ rec {
|
|||
uniq = elemType: mkOptionType {
|
||||
inherit (elemType) name check iter fold docPath hasOptions;
|
||||
merge = list:
|
||||
if tail list == [] then
|
||||
if length list == 1 then
|
||||
head list
|
||||
else
|
||||
throw "Multiple definitions. Only one is allowed for this option.";
|
||||
|
|
Loading…
Reference in a new issue