From 84274cbc95b370bf8e38430453b48b7017671a8a Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Mon, 21 Mar 2022 23:06:01 +0100 Subject: [PATCH] lib: Add toFunction --- lib/default.nix | 3 ++- lib/trivial.nix | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/default.nix b/lib/default.nix index 1746efc68196..2d231bbd2d92 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -68,7 +68,8 @@ let bitNot boolToString mergeAttrs flip mapNullable inNixShell isFloat min max importJSON importTOML warn warnIf throwIfNot checkListOfEnum info showWarnings nixpkgsVersion version - mod compare splitByAndCompare functionArgs setFunctionArgs isFunction + mod compare splitByAndCompare + functionArgs setFunctionArgs isFunction toFunction toHexString toBaseDigits; inherit (self.fixedPoints) fix fix' converge extends composeExtensions composeManyExtensions makeExtensible makeExtensibleWithCustomName; diff --git a/lib/trivial.nix b/lib/trivial.nix index c68bac902e91..52648125059d 100644 --- a/lib/trivial.nix +++ b/lib/trivial.nix @@ -403,6 +403,25 @@ rec { isFunction = f: builtins.isFunction f || (f ? __functor && isFunction (f.__functor f)); + /* + Turns any non-callable values into constant functions. + Returns callable values as is. + + Example: + + nix-repl> lib.toFunction 1 2 + 1 + + nix-repl> lib.toFunction (x: x + 1) 2 + 3 + */ + toFunction = + # Any value + v: + if isFunction v + then v + else k: v; + /* Convert the given positive integer to a string of its hexadecimal representation. For example: