[erlang-questions] Exporting a record type

Jesper Louis Andersen jesper.louis.andersen@REDACTED
Mon Jul 13 12:03:07 CEST 2015


On Sun, Jul 12, 2015 at 5:06 PM, Lloyd R. Prentice <lloyd@REDACTED>
wrote:

> Also, in your repr/2 code (which is very suggestive of neat things one can
> do) what is the significance of the View variable? As I see it now, it's
> simply a tag like thumbnail_overview, but I'm not comfortable that my
> understanding is correct.


The idea, at least, is this: a "view" of some data, book, record, ..., is a
way to cast that data into another structure by transforming it. I.e.,
"view" the data in another form. In statically typed languages, some
languages support built-in view-types, so you can define these
transformations formally, but in Erlang you have to make a more dynamic
resolution.

In its simple form, the view is just an atom(), requesting the view. But in
a more advanced form, the view is a language which can be executed to
construct a view of the data:

...
repr(Book, {relation, R}) ->
    repr_rel(Book, R).

repr_rel(#book { genre = G } = Book, genre) ->
    {G, Book}.

Now, suppose you have a list of books, Bs:

Rel = [repr(B, {relation, genre}) || B <- Bs],
R = sofs:relation(Rel),
F = sofs:relation_to_family(R),
sofs:to_external(F).

If for instance you have books [#book { genre = fantasy } = A, #book {
genre = fantasy } = B, #book { genre = scifi } = C],

Then the above would return

[{fantasy, [A, B]}, {scifi, [C]}].

There are numerous tricks that can be played here, depending on what
transformations you need.



-- 
J.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150713/37b007c5/attachment.htm>


More information about the erlang-questions mailing list