docs: Note that tryEval doesn't do deep evaluation

This commit is contained in:
Silvan Mosberger 2019-09-03 07:32:44 +02:00
parent 84de821004
commit e4ea3e0306
No known key found for this signature in database
GPG key ID: 9424360B4B85C9E7

View file

@ -1607,12 +1607,18 @@ stdenv.mkDerivation (rec {
<term><function>builtins.tryEval</function> <term><function>builtins.tryEval</function>
<replaceable>e</replaceable></term> <replaceable>e</replaceable></term>
<listitem><para>Try to evaluate <replaceable>e</replaceable>. <listitem><para>Try to shallowly evaluate <replaceable>e</replaceable>.
Return a set containing the attributes <literal>success</literal> Return a set containing the attributes <literal>success</literal>
(<literal>true</literal> if <replaceable>e</replaceable> evaluated (<literal>true</literal> if <replaceable>e</replaceable> evaluated
successfully, <literal>false</literal> if an error was thrown) and successfully, <literal>false</literal> if an error was thrown) and
<literal>value</literal>, equalling <replaceable>e</replaceable> <literal>value</literal>, equalling <replaceable>e</replaceable>
if successful and <literal>false</literal> otherwise. if successful and <literal>false</literal> otherwise. Note that this
doesn't evaluate <replaceable>e</replaceable> deeply, so
<literal>let e = { x = throw ""; }; in (builtins.tryEval e).success
</literal> will be <literal>true</literal>. Using <literal>builtins.deepSeq
</literal> one can get the expected result: <literal>let e = { x = throw "";
}; in (builtins.tryEval (builtins.deepSeq e e)).success</literal> will be
<literal>false</literal>.
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>