Loading lib/lists.nix +19 −0 Original line number Diff line number Diff line Loading @@ -627,6 +627,25 @@ rec { list2: take (length list1) list2 == list1; /* Remove the first list as a prefix from the second list. Error if the first list isn't a prefix of the second list. Type: removePrefix :: [a] -> [a] -> [a] Example: removePrefix [ 1 2 ] [ 1 2 3 4 ] => [ 3 4 ] removePrefix [ 0 1 ] [ 1 2 3 4 ] => <error> */ removePrefix = list1: list2: if hasPrefix list1 list2 then drop (length list1) list2 else throw "lib.lists.removePrefix: First argument is not a list prefix of the second argument"; /* Return a list consisting of at most `count` elements of `list`, starting at index `start`. Loading lib/tests/misc.nix +17 −0 Original line number Diff line number Diff line Loading @@ -501,6 +501,23 @@ runTests { expected = false; }; testListRemovePrefixExample1 = { expr = lists.removePrefix [ 1 2 ] [ 1 2 3 4 ]; expected = [ 3 4 ]; }; testListRemovePrefixExample2 = { expr = (builtins.tryEval (lists.removePrefix [ 0 1 ] [ 1 2 3 4 ])).success; expected = false; }; testListRemovePrefixEmptyPrefix = { expr = lists.removePrefix [ ] [ 1 2 ]; expected = [ 1 2 ]; }; testListRemovePrefixEmptyList = { expr = (builtins.tryEval (lists.removePrefix [ 1 2 ] [ ])).success; expected = false; }; testFoldAttrs = { expr = foldAttrs (n: a: [n] ++ a) [] [ { a = 2; b = 7; } Loading Loading
lib/lists.nix +19 −0 Original line number Diff line number Diff line Loading @@ -627,6 +627,25 @@ rec { list2: take (length list1) list2 == list1; /* Remove the first list as a prefix from the second list. Error if the first list isn't a prefix of the second list. Type: removePrefix :: [a] -> [a] -> [a] Example: removePrefix [ 1 2 ] [ 1 2 3 4 ] => [ 3 4 ] removePrefix [ 0 1 ] [ 1 2 3 4 ] => <error> */ removePrefix = list1: list2: if hasPrefix list1 list2 then drop (length list1) list2 else throw "lib.lists.removePrefix: First argument is not a list prefix of the second argument"; /* Return a list consisting of at most `count` elements of `list`, starting at index `start`. Loading
lib/tests/misc.nix +17 −0 Original line number Diff line number Diff line Loading @@ -501,6 +501,23 @@ runTests { expected = false; }; testListRemovePrefixExample1 = { expr = lists.removePrefix [ 1 2 ] [ 1 2 3 4 ]; expected = [ 3 4 ]; }; testListRemovePrefixExample2 = { expr = (builtins.tryEval (lists.removePrefix [ 0 1 ] [ 1 2 3 4 ])).success; expected = false; }; testListRemovePrefixEmptyPrefix = { expr = lists.removePrefix [ ] [ 1 2 ]; expected = [ 1 2 ]; }; testListRemovePrefixEmptyList = { expr = (builtins.tryEval (lists.removePrefix [ 1 2 ] [ ])).success; expected = false; }; testFoldAttrs = { expr = foldAttrs (n: a: [n] ++ a) [] [ { a = 2; b = 7; } Loading