guix/tests/lang/lib.nix

29 lines
551 B
Nix

with builtins;
rec {
fold = op: nul: list:
if list == []
then nul
else op (head list) (fold op nul (tail list));
concat =
fold (x: y: x + y) "";
and = fold (x: y: x && y) true;
flatten = x:
if isList x
then fold (x: y: (flatten x) ++ y) [] x
else [x];
sum = fold (x: y: add x y) 0;
hasSuffix = ext: fileName:
let lenFileName = stringLength fileName;
lenExt = stringLength ext;
in !(lessThan lenFileName lenExt) &&
substring (sub lenFileName lenExt) lenFileName fileName == ext;
}