[erlang-questions] Exporting a record type
Lloyd R. Prentice
lloyd@REDACTED
Tue Jul 14 15:38:47 CEST 2015
P.S. Nicolas Bourbaki was a committee.
There's hope for us yet.
LRP
Sent from my iPad
> On Jul 14, 2015, at 3:20 AM, Loïc Hoguin <essen@REDACTED> wrote:
>
> 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