<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jul 12, 2015 at 5:06 PM, Lloyd R. Prentice <span dir="ltr"><<a href="mailto:lloyd@writersglen.com" target="_blank">lloyd@writersglen.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">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.</blockquote></div><br></div><div class="gmail_extra">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.<br><br></div><div class="gmail_extra">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:<br><br>...<br></div><div class="gmail_extra"><div><span style="font-size:12.8px">repr(</span><span style="font-size:12.8px">Book, {relation, R}) -><br></span></div><div><span style="font-size:12.8px">    repr_rel(Book, R).<br><br></span></div><div><span style="font-size:12.8px">repr_rel(#book { genre = G } = Book, genre) -><br></span></div><div><span style="font-size:12.8px">    {G, Book}.<br><br></span></div><div><span style="font-size:12.8px">Now, suppose you have a list of books, Bs:<br><br></span></div><div><span style="font-size:12.8px">Rel = [repr(B, {relation, genre}) || B <- Bs],<br></span></div><div><span style="font-size:12.8px">R = sofs:relation(Rel),<br></span></div><div><span style="font-size:12.8px">F = sofs:relation_to_family(R),<br></span></div><div><span style="font-size:12.8px">sofs:to_external(F).<br><br></span></div><div><span style="font-size:12.8px">If for instance you have books [#book { genre = fantasy } = A, #book { genre = fantasy } = B, #book { genre = scifi } = C],<br><br></span></div><div><span style="font-size:12.8px">Then the above would return<br><br></span></div><div><span style="font-size:12.8px">[{fantasy, [A, B]}, {scifi, [C]}].<br><br></span></div><div><span style="font-size:12.8px">There are numerous tricks that can be played here, depending on what transformations you need.<br><br></span></div></div><div class="gmail_extra"><br clear="all"><br>-- <br><div class="gmail_signature">J.</div>
</div></div>