@ -73,27 +73,9 @@ rec {
# usage: { testX = allTrue [ true ]; }
testAllTrue = expr : { inherit expr ; expected = map ( x : true ) expr ; } ;
# evaluate everything once so that errors will occur earlier
# hacky: traverse attrs by adding a dummy
# ignores functions (should this behavior change?) See strictf
#
# Note: This should be a primop! Something like seq of haskell would be nice to
# have as well. It's used fore debugging only anyway
strict = x :
let
traverse = x :
if isString x then true
else if isAttrs x then
if x ? outPath then true
else all id ( mapAttrsFlatten ( n : traverse ) x )
else if isList x then
all id ( map traverse x )
else if isBool x then true
else if isFunction x then true
else if isInt x then true
else if x == null then true
else true ; # a (store) path?
in if traverse x then x else throw " e l s e n e v e r r e a c h e d " ;
strict = v :
trace " W a r n i n g : s t r i c t i s d e p r e c a t e d a n d w i l l b e r e m o v e d i n t h e n e x t r e l e a s e "
( builtins . seq v v ) ;
# example: (traceCallXml "myfun" id 3) will output something like
# calling myfun arg 1: 3 result: 3