[erlang-questions] Exporting a record type

Loïc Hoguin essen@REDACTED
Tue Jul 14 09:20:30 CEST 2015


If you have a few months with nothing to do you can figure out sofs and 
add human-readable documentation in OTP. Then everyone can understand 
Jesper's post. :-)

On 07/14/2015 03:14 AM, lloyd@REDACTED wrote:
> Hi Jesper et. al.
>
> This way cool stuff.
>
> The topic is much deeper than I thought. I need to play with it over the next few days to be sure I fully understand. But it feels like it deserves a fleshed out blog post or tutorial.
>
> I'd be happy to do the heavy lifting for such a post, but no doubt many more questions will flood my child-mind before I'm competent to do so. Do you folks mind if I continue in my role as Mickey-the_Dunce?
>
> Many thanks to all,
>
> Lloyd
>
> -----Original Message-----
> From: "Jesper Louis Andersen" <jesper.louis.andersen@REDACTED>
> Sent: Monday, July 13, 2015 6:03am
> To: "Lloyd R. Prentice" <lloyd@REDACTED>
> Cc: "Gordon Guthrie" <gguthrie@REDACTED>, "erlang-questions" <erlang-questions@REDACTED>
> Subject: Re: [erlang-questions] Exporting a record type
>
> 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.
>
>
>

-- 
Loïc Hoguin
http://ninenines.eu
Author of The Erlanger Playbook,
A book about software development using Erlang



More information about the erlang-questions mailing list