NEWS since Mercury release 0.8: ------------------------------- Changes to the Mercury language: ******************************** * We've made a small change to the rule for quantification of lambda expressions. The new rule is that all variables in the arguments of lambda expressions are treated as locally quantified to that lambda expression. For function lambda expressions, variables in the result term use the normal quantification rules. See the "Data-terms" section of the "Syntax" chapter of the Mercury language reference manual for details. Previously, the exact quantification rule for lambda expressions was not documented, but the compiler would locally quantify variables in function return values, and it would only locally quantify variables occuring at the top level of an argument term, not those occurring in subterms. Both of these were rather surprising for functional programmers. It is possible that this change may break some existing code using predicate lambda expressions with compound terms as arguments, but we expect this to be extremely rare. If it does occur, the compiler will issue a warning about variables having overlapping scopes, and the work-around is simple: use a fresh variable for the lambda predicate argument and unify it with the compound term in the body of the lambda expression. * The old-style syntax for predicate lambda expressions, `lambda([] is , )', is now officially deprecated. Please use the new syntax-style `(pred([]) is :- )' instead. The compiler still supports the old-style syntax, but we plan to eventually drop this support in some future release. * Terms in the form of x `fun` y are transformed into fun(x, y). `fun` is parsed as an infix operator with the highest possible precedence and left associativity. Changes to the Mercury standard library: **************************************** * We've added some new predicates to the Mercury standard library: array__map/3, bag__count_value/3. * The following predicates have been replaced by functions with the same names, and will be removed in a future release. The predicate versions were intended for use in programs which needed to work in both Prolog and Mercury, but executing Mercury programs using Prolog is no longer supported. float__ceiling_to_int/2, float__floor_to_int/2, float__round_to_int/2, float__truncate_to_int/2, float__abs/2, float__max/3, float__min/3, float__pow/3, float__hash/2, float__max/1, float__min/1, float__epsilon/1, float__radix/1, float__mantissa_digits/1, float__min_exponent/1, float__max_exponent/1. * The implementations of `int:>>/2' and `int:<>/2' and `int:<