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


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

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,

curry mailing list
Received on Do Aug 23 2012 - 12:54:44 CEST

This archive was generated by hypermail 2.3.0 : Do Jun 13 2024 - 07:15:12 CEST