Overloaded record fields

Malcolm Wallace malcolm.wallace at me.com
Mon Jul 1 09:18:54 CEST 2013


> 
> Simon, Malcolm, here's a solution (at risk of more bikeshedding on syntax).
> 
>    e { foo }
> 
>  * The braces say 'here comes a record'.
>  * Also say 'expect funny business with names'.
>  * The absence of `=` says this is getFld, not update.
>  * This is not currently valid syntax [**], so we don't break code.
>  * It's postfix. (And only a couple more chars than infix dot.)
>  * So perhaps an IDE can see the opening brace and prompt for fields?
>    (Perhaps some IDE's do this already for record update?)

I like it.  It fits with the existing syntax.  Nested records are chained:

    foo{bar}{subbar}{zed}

> Possible future development:
> 
>    e { foo, bar, baz }  -- produces a tuple ( _, _, _ )
>                         -- with fields in order given
>                         -- _not_ 'canonical' order in the data type
> 
>  * By coincidence, that syntax is per one of the dialects for
>    relational algebra projection over a tuple.

Not quite so keen on this.  I would argue that in relational algebra (which I use a lot, although with a dynamically-type API, rather than strongly-typed), the ordering of columns and rows is never significant, and should never be exposed to the user directly.  I long for the day when we can offer a strong-typing to Relations, but it would be worse to pretend that something is kind-of relation-like, without the underlying properties that make it powerful.

Regards,
    Malcolm


More information about the Glasgow-haskell-users mailing list