<br><br>On Sunday, July 12, 2015, Lloyd R. Prentice <<a href="mailto:lloyd@writersglen.com">lloyd@writersglen.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><br><div>Thank you!  Your explication makes perfect sense. A basic point still mystifies me, however:</div><div><br></div><div><blockquote type="cite"><div dir="ltr"><div class="gmail_extra">-opaque book() :: #book{}.</div></div></blockquote><div><br></div>Just exactly what is going on here? My naive interpretation is that we are defining a function name as an alias for a record and hiding the composition of the record. But I'm not sure this is correct since In the various code examples I see the xxxx() form used in -spec definitions, but not code.</div></div></blockquote><div><br></div><div>-opaque is like -type but it does not export the implementation details of the type. This states that `book()` is a type alias for the `#book{}` record, but it's opaque so other modules are only allowed to pass around values of type `book()`, never create them directly. Your second thought here is basically spot on, this is a way to define a `book()` that can be used in `-spec` annotations.</div><div><br></div><div>-bob</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><blockquote type="cite"><div dir="ltr"><div class="gmail_extra">
</div></div>
</blockquote></div></blockquote>