lib/trivial: add assertMsg

This commit is contained in:
Profpatsch 2018-07-26 20:45:55 +02:00
parent fc2c606a7a
commit 0e2aa97f3a
2 changed files with 22 additions and 1 deletions

View file

@ -59,7 +59,8 @@ let
inherit (trivial) id const concat or and bitAnd bitOr bitXor bitNot
boolToString mergeAttrs flip mapNullable inNixShell min max
importJSON warn info nixpkgsVersion version mod compare
splitByAndCompare functionArgs setFunctionArgs isFunction;
splitByAndCompare functionArgs setFunctionArgs isFunction
assertMsg;
inherit (fixedPoints) fix fix' extends composeExtensions
makeExtensible makeExtensibleWithCustomName;

View file

@ -188,6 +188,26 @@ rec {
warn = msg: builtins.trace "WARNING: ${msg}";
info = msg: builtins.trace "INFO: ${msg}";
/* Print a trace message if pred is false.
Intended to be used to augment asserts with helpful error messages.
Example:
assertMsg false "nope"
=> false
stderr> trace: nope
assert (assertMsg ("foo" == "bar") "foo is not bar, silly"); ""
stderr> trace: foo is not bar, silly
stderr> assert failed at
Type:
assertMsg :: Bool -> String -> Bool
*/
assertMsg = pred: msg:
if pred
then true
else builtins.trace msg false;
## Function annotations