msg: { actual, expected, asString ? false, asJSON ? false, removeDunders ? false, safeToPrint ? true }: let preProcess = v: if removeDunders then builtins.removeAttrs v [ "__toString" "__functor" ] else if asString then toString v else if asJSON then builtins.toJSON v else v; a = preProcess actual; e = preProcess expected; in if (a == e) then '' echo 'it ${msg}' '' else builtins.trace actual builtins.trace expected '' echo FAILED ${msg} echo '${if safeToPrint then builtins.toJSON actual else ""}' ''