Update of the Curry report

From: Michael Hanus <mh_at_informatik.uni-kiel.de>
Date: Thu, 23 Aug 2012 12:53:20 +0200

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

This archive was generated by hypermail 2.3.0 : Fr Mär 29 2024 - 07:15:12 CET