updating labelled fields
Hal Daume III
hdaume@ISI.EDU
Thu, 9 May 2002 14:31:03 -0700 (PDT)
> [SNIP]
>
> I don't think this is ambigous -- do is a keyword, so no record field update
> can be assumed after it.
Okay, I thought about it some more and I agree.
So, as it stands the proposal is to add the following pieces of sugar:
1) ({assignments}) becomes \x->x{assignments}
2) x{as, field =, bs} becomes \y->x{as, field = y, bs}
3) x{as, field, bs} becomes \f->x{as, field = f (field x), bs}
So then if we see:
({field=})
this gets desugared to
\x -> x{field=}
which gets again desugared to
\x -> \y -> x{field = y}
Similarly,
({field})
becomes
\x -> x{field}
becomes
\x -> \f -> x{field = f (field x)}
The only "problem" i see with this is that I would probably want the
lambda terms to be in the other order, so, just as you would write:
apField f x
you would write:
({field}) f x
But this is backwards...putting a call to flip in sort of defeats the
purpose.
One thing that could be done would be to rewrite the rules as:
1) {field=} becomes \y -> ({field=y})
2) {field} becomes \f -> ({field $= f}) -- assuming $= exists
3) {stuff} becomes \x -> x{stuff}
where "stuff" has no dangling = and $= and stuf flike that
If we go this route, I would suggest that instead of just {field} in #2,
we make it {field $=} to keep parallelism with the $= thingy and to make
it clear that we're doing function application.
So, again,
{field =}
==> \y -> {field=y} -- rule 1, there's a dangling =
==> \y -> \x -> x{field=y} -- rule 3, no dangling things
and similarly:
{field $=}
==> \f -> {field $= f} -- rule 2, there's a dangling $=
==> \f -> \x -> x{field $= f}-- rule 3, no dnagling things
I believe this is still amenable to fitting in the syntax without pouncing
on anything.
Assuming I can ever get my cvs'd copy of ghc to compile (sigh), I would be
willing to implement this if there are no objections...
- Hal