Re: Neither PAKCS nor MCC transform right sections according to the Curry report.

From: Sebastian Fischer <>
Date: Sun, 20 Feb 2011 10:47:30 +0900

On Sat, Feb 19, 2011 at 7:09 PM, Wolfgang Lux <> wrote:

> Incidentally, the current translation of sections in the report is rather
> inconsistent.

Yes, currently right sections (should) destroy the sharing of the argument,
left sections don't (according to the report).

Before changing MCC in any way, I'd prefer having the report specify the
> translations of left and right sections consistently. Either
> (e `op`) = \x -> e `op` x
> (`op` e) = \x -> x `op` e

With this proposal, both left and right sections should destroy the sharing
of the argument.

> or
> (e `op`) = (\f x y -> f x y) (op) (e)
> (`op` e) = (\f x y -> f y x) (op) (e)

With this proposal, neither left nor right sections should destroy the
sharing of the argument. It is equivalent to

    (e `op`) = op e
    (`op` e) = flip op e

but has more symmetric syntax.

> Just for reference, the former is used in the Haskell report, but then it
> makes only a difference w.r.t. efficiency if sharing is broken in Haskell.

Yes, and IIRC GHC uses a translation that does not destroy sharing.

> As noted above, I'd prefer the report to use the second transformation,
> which has the additional advantage that no name captures are possible.

I am slightly in favor of your second proposal too (while I don't care so
much about symmetric syntax than about symmetric semantics). I would expect
that left and right sections behave consistently regarding sharing and
additionally that

    (plus a)
    ((+) a)

all have the same meaning. This either requires to change the meaning of
right sections according to Wolfgang's second proposal or to change the
meaning of left sections *and partial applications in general* according to
(a generalization of) his first, such that the partial application

    foo a b

would be translated into

    (\x -> foo a b x)

if 'foo' has arity 3.

Actually, I'm not sure which change I prefer. Maybe partial applications
with non-deterministic arguments would behave more intuitively without
sharing of the arguments (I don't know).

Changing only the meaning of right sections is certainly a more conservative


curry mailing list
Received on So Feb 20 2011 - 18:24:31 CET

This archive was generated by hypermail 2.3.0 : Do Jun 20 2024 - 07:15:11 CEST