Re: record syntax for E, please help

Kevin Reid <[email protected]>
Newsgroups gmane.comp.lang.e.general
Message-ID <[email protected]>
On Jan 7, 2008, at 19:56, Pierre Radermecker wrote:

> Does E provide syntactic facilities for "records" ? I like to do
> something similar to the Erlang record syntax :
>
> -record(language,{name = 'E', popularity= high, rating}).
>
> Declaring a constructor for each default/optional data does not sound
> like a practical option ;-) Is it the default way to create data  
> container ?
>
> I would like to have an immutable data store that can be built quickly
> according to the data at hand together with an explicit "template"  
> that
> indicate which kind of data the objects can hold. So "dictionary" or
> "map" seems like a poor option.
>
> Of course if I can do "pattern matching" (or whatever) to quickly
> create, read or update the container that would be wonderful.

Well, let's sketch something out. I've been thinking about a library  
to provide Haskell-style algebraic data types, which would need much  
of the same mechanism as this problem.

How would you like this?

? def [=> makeLanguage] := recordType`name :$String := ${"E"},
 >                                     popularity := $high,
 >                                     rating :$int`

(the := is used to match E's map-default syntax, which might change)

? def l := makeLanguage([name => "Java",
 >                        rating => 64])
# value: <language name => "Java", popularity => <high>, rating => 64>

? l.name()
# value: "Java"

? pragma.enable("call-pattern")
 > def makeLanguage([=> name, => rating] | _) := l
 > rating
# value: 64

Now, this might be a bit inefficient in current implementations  
(though maps in arguments really ought to be optimized, considering);  
one could instead pack it in the verb:

? def l := makeLanguage."name,rating"("Java", 64)
# value: <language name => "Java", popularity => <high>, rating => 64>

? def makeLanguage."popularity,rating"(p, r) := l
 > p
# value: <high>


What I'm intending to show is, there are ways to do this without  
extending the fundamental syntax. We just need to pick a good one.

What do you think? What would you prefer?

-- 
Kevin Reid                            <http://homepage.mac.com/kpreid/>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.