<div dir="ltr">I started a new project a while ago, and I am using Erlang + Webmachine as it is what I am familiar with. Elixir has some cool stuff going on, but as I was already using 1 language that I was not familiar with (Elm) I didn't want to add to the technical risk by adding a 2nd language when the benefits of Elixir over Erlang for me were not that huge.<div><br></div><div>Of course it is possible that in the future some Elixir may be added to the project, but who knows.</div><div><br></div><div>I for one would love to see an ML-family language on the beam!</div></div><div hspace="streak-pt-mark" style="max-height:1px"><img style="width:0px;max-height:0px;overflow:hidden" src="https://mailfoogae.appspot.com/t?sender=aemtlc3NpbkBnbWFpbC5jb20%3D&type=zerocontent&guid=59e9b56e-adf5-49e6-8d01-108f0e4aec02"><font color="#ffffff" size="1">ᐧ</font></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Mar 6, 2016 at 6:32 PM, Garrett Smith <span dir="ltr"><<a href="mailto:g@rre.tt" target="_blank">g@rre.tt</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><span class=""><div dir="ltr">On Sat, Mar 5, 2016 at 10:04 PM Robert Virding <<a href="mailto:rvirding@gmail.com" target="_blank">rvirding@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>One definite benefit in having to explicitly write every callback even if it is doing "default" stuff is that everything *IS* then explicit and you can directly SEE what happens. And come on, writing a 2 line default case for a few callbacks is really not that much to extra code.<br><br></div>A major problem with having implicit "default" cases is that what people consider to be a reasonable default handling varies depending on what just that server is doing. There is no default that suits every server so I will probably have to write it out and anyway.<br><br></div>Hiding callbacks behind defaults also means that you don't SEE everything that is there. This can be a major problem for newcomers.</div></div></blockquote><div><br></div></span><div>A counter point to this is that by deferring increasingly complex cases by providing sensible defaults, a user can more quickly and correctly understand an API. A useful abstraction has a story line - and I think the simpler the better. Requiring the user to accommodate increasingly edge cases undermines the main story line.</div><div><br></div><div>E.g. I like the pattern in Erlang functions that follows the getopt Tao of required params + options. Let me get to the gist of an operation with the fewest possible inputs and I can incrementally grow into the more complex cases.</div><div><br></div><div>I think this is less about typing and more about clarity of intent. <br></div><div><br></div><div>The challenge to getting this right is drawing that line between the essential interface and the incremental enhancements. Libraries fail when they outright hide important details and leave the user mystified with seemingly magical behavior.</div><div><br></div></div></div>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>Zach Kessin</div><div><span style="font-size:12.8px"><a href="http://yourcrm.link/?utm_source=email%20signature&utm_medium=email&utm_campaign=passive" target="_blank">Your CRM Link</a></span></div><div><span style="font-size:12.8px">Twitter: </span><a href="https://twitter.com/zkessin" style="font-size:12.8px" target="_blank">@zkessin</a><br></div><div>Skype: zachkessin<br></div></div></div></div></div></div></div>
</div>