Dear Colleagues,
after various discussions on syntactical extensions of Curry
via this mailing list, I summarized the proposals in an
update of the Curry report. Before making this update
"official", you can look into the updated report at
http://www.informatik.uni-kiel.de/~curry/papers/report83.pdf
and send me (via this mailing list) any corrections/suggestions.
Here is a summary of the changes compared to the
previous version (0.8.2) of the report (where I also added
a reference to the discussions in the mailing list):
Section 2.3 (Function declarations):
- The restrictions on higher-order rules (i.e., which were
considered as syntactic sugar for eta expanded rules) has been
omitted (since eta expansion changes the sharing behavior).
See
http://www.informatik.uni-kiel.de/~curry/listarchive/0497.html
As a consequence, it is explicitly mentioned that the different rules
defining a function must have the same number of arguments in
each left-hand side.
- Restrictions on linear left-hand sides in function definitions
removed, i.e., a function definition of the form
f x y x | c = e
is considered as syntactic sugar for
f x y z | x=:=z &> c = e
See the thread on syntax extensions ending in
http://www.informatik.uni-kiel.de/~curry/listarchive/0904.html
Section 2.5 (Free variables):
- Anonymous free variables are allowed in expressions.
Thus, an occurrence of "_" in an expression is an abbreviation
of "let x free in x".
See
http://www.informatik.uni-kiel.de/~curry/listarchive/0895.html
New Section 5.4 (Flexible case expressions):
- fcase expressions for denoting flexible pattern matching
without explicitly introducing an auxiliary function added.
In general,
fcase e of { t1 | gd11 -> e11; ...; tn | gdn -> en }
is equivalent to
let f t1 | gd1 = e1; ...; f tn | gdn = en in f e
where is a some new function symbol.
Thus, fcase is now also a keyword (see Section C.1).
See:
http://www.informatik.uni-kiel.de/~curry/listarchive/0897.html
Appendix B (Prelude):
- definition of failed changed to external function
Appendix D.7 (Eliminating local declarations):
- Semantics of left and right sections defined by:
(e `op`) = (\f x y -> f x y) (op) (e)
(`op` e) = (\f x y -> f y x) (op) (e)
See:
http://www.informatik.uni-kiel.de/~curry/listarchive/0928.html
Best regards,
Michael
_______________________________________________
curry mailing list
curry_at_lists.RWTH-Aachen.DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry
Received on Do Aug 23 2012 - 12:54:44 CEST