<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="95728" data-post-id="95728">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="benwilson512" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/120/1457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  benwilson512
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Craft GraphQL APIs in Elixir with Absinthe</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="zkessin" data-post="10" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zkessin/48/20267_2.png" class="avatar"> zkessin:</div>
<blockquote>
<p>It would appear that basic knowledge from Promises and Futures is missing.</p>
</blockquote>
</aside>
<p>Best I can tell every language that works with promises is working super hard to get a built in <code>await</code> function to get back to normal programming, so Elixir may have been ahead of the curve by skipping that.</p>
<p>More to the point, languages with green threads (AKA M:N threading) tend to use that as the core primitive for handling concurrency, isolation, and async code, so the APIs are gonna be different from languages that are built around single threaded event loops.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95728" data-batch-url="/posts/batch_likers">
                        8
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-95728" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95728"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="95731" data-post-id="95731">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="peerreynders" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/120/5826_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  peerreynders
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Fl4m3Ph03n1x" data-post="1" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/fl4m3ph03n1x/48/11709_2.png" class="avatar"> Fl4m3Ph03n1x:</div>
<blockquote>
<p>I may very well be missing something <strong>brutal</strong> .</p>
</blockquote>
</aside>
<p>Maybe you’re missing some videos. For example while not being about Elixir, it’s important about mindset: <a href="https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/SimpleMadeEasy.md" rel="noopener nofollow ugc">Simple Made Easy</a>.</p>
<p>Also make a point of watching <a href="https://youtu.be/_fgaPGLGZI0" rel="noopener nofollow ugc">Thinking like an Erlanger</a>:</p>
<ul>
<li><a href="https://youtu.be/_fgaPGLGZI0?t=155" rel="noopener nofollow ugc">Syntax is irrelevant</a></li>
<li>It’s all about <a href="https://youtu.be/_fgaPGLGZI0?t=425" rel="noopener nofollow ugc">Protocols</a> - i.e. distributed state in the service of protocols.</li>
</ul>
<blockquote>
<p>I have a strong JS background where I do FP ( yes, it is possible ),</p>
</blockquote>
<p>Yes, but the non-FP escape hatches are always <em>too temptingly, too close by</em>, so there is a lot of discipline required to develop a good FP-style and JavaScript being what it is, a pure FP-style isn’t always in the interest of the implementation - e.g. you <em>can</em> use recursion but given that there is no last call optimization, iteration is the <em>right thing to do</em>. So while you can push the limits (<a href="https://leanpub.com/javascriptallongesix/read" rel="noopener nofollow ugc">JavaScript Allongé, the “Six” Edition</a>), adopting an FP style almost requires that you work in parallel in a true (but not necessarily pure) FP language. So in a JS environment you are better off by getting the most out of transpilation by working in BuckleScript, ReasonML, PureScript, ClojureScript, etc.</p>
<blockquote>
<p>Has a native pipe operator ! |&gt; JS is being left behind <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" loading="lazy" width="20" height="20"></p>
</blockquote>
<p>Keeping in mind that piping is <em>forward function application</em> which can be used as a more pragmatic <em>variation</em> (and some would argue a more readable) variation on function composition.</p>
<blockquote>
<p>Has native List concat and diff operators <code>++</code> and <code>--</code></p>
</blockquote>
<p>Which really don’t seem as useful as knowing how to appropriately wield construction and pattern matching via the <a href="https://hexdocs.pm/elixir/List.html#moduledoc" rel="noopener nofollow ugc">cons cell syntax</a>.</p>
<blockquote>
<p>Has destructuring !</p>
</blockquote>
<p>More accurately <em>pattern matching</em> - JavaScript only has <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment" rel="noopener nofollow ugc">destructuring</a>. <a href="http://blog.fogus.me/2011/01/12/pattern-matching-vs-destructuring-to-the-death/#comment-23455" rel="noopener nofollow ugc">Pattern matching is a conditional construct, destructuring is not</a>.</p>
<blockquote>
<p>Functions can have the same name as long as their signature is different !</p>
</blockquote>
<p>No they cannot. A single function can be composed of multiple clauses. If it has the same name and the same arity it is the same function. Same name, different arity - different functions. Signature often implies sensitivity to argument type - and pattern matching may give the impression that something like that is going on - but there isn’t.</p>
<blockquote>
<p>Has anonymous functions</p>
</blockquote>
<p>Which are useful as a closure. If you just need a function then give it an intention revealing name for the sake of clarity. Terseness is not always a benefit.</p>
<blockquote>
<p>Has no for loop constructor.</p>
</blockquote>
<p>In FP recursion is the name of the game.</p>
<blockquote>
<p>No partial application and no currying.</p>
</blockquote>
<p>Currying is a programmer convenience but hardly essential. Partial application can be achieved via closures, so no loss there. So it’s not quite as elegant. Haskell is a great learning experience but it’s <em>purity</em> has an elitist flair.</p>
<blockquote>
<p>weird syntax.</p>
</blockquote>
<p>See above. Syntax is irrelevant and lack of familiarity.</p>
<blockquote>
<p>Most of it’s native functions are data first,</p>
</blockquote>
<p>Again, given that there is no native support for currying it’s hardly an issue. And Bucklescript is <a href="https://github.com/BuckleScript/bucklescript/issues/2463" rel="noopener nofollow ugc">moving the same way</a> (likely to placate ReasonML) and <em>it</em> supports currying.</p>
<blockquote>
<p>No Monads</p>
</blockquote>
<p>Again there is an elitist element to “purity”. Erlang and Elixir set out to be pragmatic (<a href="http://blog.plataformatec.com.br/2016/05/beyond-functional-programming-with-elixir-and-erlang/" rel="noopener nofollow ugc">Beyond Functional Programming with Elixir and Erlang</a>).</p>
<blockquote>
<p>No return statements</p>
</blockquote>
<p>If it doesn’t return anything it’s not a function, it’s a procedure. And keep in mind that everything is an expression anyway - there are no statements. So by definition a <strong>function</strong> has to return <em>something</em>, i.e. the value that the last expression evaluates to. So <code>return</code> is extraneous and unnecessary.</p>
<blockquote>
<p>For most people, this would be a comment…</p>
</blockquote>
<p>Another familarity issue … and only if you come from a C-style language.</p>
<blockquote>
<p>is super cryptic.</p>
</blockquote>
<p>Syntax is irrelevant. And in this case you can always go with the long hand notation - which you have to use anyway if the function has an arity of 0.</p>
<blockquote>
<p>better support for the functional paradigm than Elixir.</p>
</blockquote>
<p>Being a functional language has also to do <a href="https://youtu.be/nmGuifHhQxg?t=300" rel="noopener nofollow ugc">with the features that aren’t supported</a> - namely mutability by default. Furthermore while recursion is possible in JavaScript, it’s not something that is recommended (Bucklescript transpiles recursion to iteration whenever possible).</p>
<blockquote>
<p>I must say I expected more from a newly designed FP language.</p>
</blockquote>
<p>Well it isn’t. Erlang dates back to 1986. Elixir puts a coat of paint of Ruby-style syntax over it <strong>and</strong> adds hygenic macro support which is something the LISP community is more familiar with.</p>
<blockquote>
<p>it is extremely imperative with good old try rescue blocks</p>
</blockquote>
<p>Again you are judging from the perspective of your own familiarity.<br>
<a href="https://www.youtube.com/watch?v=soKTK6hK70s&amp;feature=youtu.be&amp;t=1722" rel="noopener nofollow ugc">Erlang Oddities - Brujo Benavides</a></p>
<blockquote>
<p>It would appear that basic knowledge from Promises and Futures is missing.</p>
</blockquote>
<p><a href="https://youtu.be/0jsdXFUvQKE?t=272" rel="noopener nofollow ugc">Erlang Master Class 2: Video 2 - Abstracting patterns of concurrency</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95731" data-batch-url="/posts/batch_likers">
                        14
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-95731" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95731"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="95735" data-post-id="95735">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="codyclay88" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/codyclay88/120/11590_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  codyclay88
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>As someone else who just started learning Elixir (coming from a .NET background) I would like to throw my two cents in here.</p>
<p>(Again, just learning elixir, so don’t be too critical)</p>
<p>I think the OP is missing the point a little bit, and as stated by people previously, Elixir (and Erlang alike) was not meant to be a pure functional language, but instead a “Process Oriented Language”, and in this respect it aligns a bit with OOP.</p>
<p>The power of Elixir comes from creating millions of processes that can be distributed across multiple nodes, while supervised by other processes whose sole purpose is to monitor and respawn failed processes. Error handling is not something you do a lot of in Elixir, hence the “Let it fail” way of thinking.</p>
<p>These technologies are a paradigm shift, you have to change the way you think about solving problems before you can fully appreciate it. If you are trying to write Elixir code in the same way you are writing JavaScript code then you are missing the point.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95735" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-95735" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95735"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="95740" data-post-id="95740">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sribe" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sribe
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="codyclay88" data-post="14" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/codyclay88/48/11590_2.png" class="avatar"> codyclay88:</div>
<blockquote>
<p>If you are trying to write Elixir code in the same way you are writing JavaScript code then you are missing the point.</p>
</blockquote>
</aside>
<p>Yes. And you need to realize that promises and futures are awkward ugly workarounds for runtimes that don’t have limited concurrency. They’re not in Erlang/Elixir because they’re not needed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95740" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-95740" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95740"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="95770" data-post-id="95770">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="gregvaughn" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/gregvaughn/120/954_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  gregvaughn
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Very good replies so far, but I’d like to step back for a brief historical overview that might help frame how you view Elixir in relation to other languages you know.</p>
<p>It is fundamentally a “concurrency oriented” language. Joe Armstrong (co-creator of Erlang) has described Erlang as such. Those design forces are reflected deeply in the VM itself, and it’s a property all languages on the BEAM share. The original reason for Erlang’s existence is that Ericsson needed a language to meet specific business needs. Fault tolerance was high on the list. Fault tolerance led to supervision which needed isolated processes (and basically independently discovering the actor model). Isolated processes needed immutable data and first class functions and tail call optimization. Thus functional features fell out of more primordial concerns. All of this pre-dates the creation of Haskell.</p>
<p>If you’re one that thinks proper “functional programming” has to include monads and currying, etc., then mentally put Elixir in a different language category or else you’ll remain frustrated. We have alternative means of solving similar concerns. They’re not as theoretically pure, but in practice work out well.</p>
<p>Everything I’ve said before applies to any language on the BEAM, so now let’s speak to Elixir specifically. It differs from its parent language of Erlang by adding Lisp-style hygienic macros and Clojure-style protocols. It adds the pipe operator from the ML family of languages and intentionally puts the subject first to optimize pipe use. It offers a superficially Ruby-esque syntax in some places (and differs strongly in others). It adds web development style tooling in libraries/packages via hex and in building/compiling via mix. There’s more, but that’s a good first group of things to digest.</p>
<p>There’s more to be said about intangibles like community. I find it quite interesting that you worry enough to put “plz don’t kill me” in your subject, and I’m pleased to see in the replies no inclination to even consider doing that.</p>
<p>Welcome!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95770" data-batch-url="/posts/batch_likers">
                        21
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-95770" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95770"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-most-liked cat-most-liked" title="One of the top 3 liked posts in this thread!"></div>
  </section>
</div>
    <div class="postbit" id="95772" data-post-id="95772">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="chriseyre" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chriseyre/120/11497_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  chriseyre
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yes the Elixir/Erlang community only kill their children and they use supervisors to do that <img src="https://forum.elixirforum.com/images/emoji/apple/grin.png?v=15" title=":grin:" class="emoji" alt=":grin:" loading="lazy" width="20" height="20">.</p>
<p>If you want to compare promises with simple elixir have a look at two of my projects that solve the same problem {:ok,  “the Elixir one is not quite finished”}</p>
<p><a href="https://github.com/chriseyre2000/contentful-to-neo4j" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/chriseyre2000/contentful-to-neo4j</a></p>
<p><a href="https://github.com/chriseyre2000/contentful_to_neo4j_ex" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/chriseyre2000/contentful_to_neo4j_ex</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95772" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-95772" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95772"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="95821" data-post-id="95821">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Fl4m3Ph03n1x" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Fl4m3Ph03n1x/120/11709_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Fl4m3Ph03n1x
                      <span class="op-star" title="Thread Starter">
                        <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                      </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Wow, so many yummi replies !<br>
This is going to be quite huge !</p>
<aside class="quote no-group" data-username="dwahyudi" data-post="2" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dwahyudi/48/347_2.png" class="avatar"> dwahyudi:</div>
<blockquote>
<p>You mistake Erlang and Elixir as ‘pure’ functional programming languages. They aren’t.</p>
</blockquote>
</aside>
<p>This truly breaks my heart. There is a huge marketing effort in making Elixir the new cool FP language but it lacks basic FP features because it is not a real FP language, it only borrows some concepts. I am not sure how I feel about the implications of your comment, but it makes sense and is quite unsettling to me.</p>
<aside class="quote no-group" data-username="NobbZ" data-post="3" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/nobbz/48/27235_2.png" class="avatar"> NobbZ:</div>
<blockquote>
<p>What do you mean by “normal syntax”? For me this looks pretty normal for calling into anonymous functions.</p>
</blockquote>
</aside>
<p>Normal syntax like when you call a normal function. A JS example:</p>
<pre><code>const add = x =&gt; y =&gt; x + y;
const increment = add(1);
console.log( increment(2) );
console.log( add(1) (2) );
//so on
</code></pre>
<p>In Elixir, when you call a normal function, you don’t call it with the <code>.()</code>. For example:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">def add(x, y) do
    x + y
end
# stuff happens
add(1, 2) #instead of add.(1, 2)
</code></pre>
<aside class="quote no-group quote-modified" data-username="NobbZ" data-post="3" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/nobbz/48/27235_2.png" class="avatar"> NobbZ:</div>
<blockquote>
<p>Which mistakes do you mean? Is it only the subject first thing? Its not a mistake… Its designed to work with the pipe operator, not with function composition, as we do not compose as you’d do it in haskell.</p>
<blockquote>
<p>Is there a version of NPM or Ruby Gems for Elixir ( I understand there is none so far ) ?</p>
</blockquote>
<p>I’m not pretty sure what you mean by this, but I think you are searching for hex-packages: hex.pm</p>
<blockquote>
<p>I still didn’t get into error handling, but from what I have seen, it is extremely imperative with good old <code>try rescue</code> blocks. It would appear that basic knowledge from Promises and Futures is missing</p>
</blockquote>
<p>Well, <strong>expected</strong> errors are usually handled via <code>{:error, reason}</code> tuples you match against.</p>
<p>Exceptions are usually only used for errors you do neither expect, nor could recover from.</p>
</blockquote>
</aside>
<p>Now this is mind blowing. A FP language that doesn’t do composition. Where can I read more about this ( as in, why no composition? a limitation from Erlang ? something else ? ) ?</p>
<aside class="quote no-group" data-username="NobbZ" data-post="3" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/nobbz/48/27235_2.png" class="avatar"> NobbZ:</div>
<blockquote>
<p>I’m not pretty sure what you mean by this, but I think you are searching for hex-packages: hex.pm</p>
</blockquote>
</aside>
<p>Correct! Thanks!</p>
<blockquote>
<p>Well, <strong>expected</strong> errors are usually handled via <code>{:error, reason}</code> tuples you match against.</p>
<p>Exceptions are usually only used for errors you do neither expect, nor could recover from.<br>
Ahh, so for Failures ( errors you expect ) you use pattern matching, and for Exceptions ( errors you don’t ) you use the <code>try / rescue</code> construct. I think I get it!</p>
</blockquote>
<aside class="quote no-group" data-username="mpraski" data-post="4" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mpraski/48/37176_2.png" class="avatar"> mpraski:</div>
<blockquote>
<p>It does have list (or rather <code>Enumerable</code> ) comprehensions though, you use a range to generate consecutive values:</p>
</blockquote>
</aside>
<p>Which is still not a for loop. To be honest, I <strong>love</strong> the fact Elixir misses a for loop construct! (IMO, a good thing).</p>
<aside class="quote no-group" data-username="bulldog_in_the_dream" data-post="5" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/b/58956e/48.png" class="avatar"> bulldog_in_the_dream:</div>
<blockquote>
<p>What Elixir loses in expressiveness and conveninece from not having some of the concepts you mention, it gains back in simplicity. That’s always a balance, and I like where Elixir falls on that scale.</p>
</blockquote>
</aside>
<p>Currying, Partial application and Monads are tools. You can choose to use them or not. The problem is for people who want to use those tools, they can’t. So why use Elixir ? You have other very strong FP languages out there with a bigger toolkit to use <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="chriseyre" data-post="6" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chriseyre/48/11497_2.png" class="avatar"> chriseyre:</div>
<blockquote>
<p>The reason that promises and futures are missing from the language is that the equivalents are part of OTP library. To write large Elixir/Erlang will require you to understand OTP.</p>
</blockquote>
</aside>
<p>Quite interesting. Where can i read more about this?<br>
Also, I am already checking <a href="http://Exercism.io" rel="noopener nofollow ugc">Exercism.io</a> <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="kokolegorille" data-post="7" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/kokolegorille/48/4784_2.png" class="avatar"> kokolegorille:</div>
<blockquote>
<p>The real benefit of the language is not to be functional, but the ability to spawn million of <a href="https://elixir-lang.org/getting-started/processes.html" rel="nofollow">processes</a>, and still be able to supervise the system.</p>
</blockquote>
</aside>
<p>I think I get it, very well put!</p>
<aside class="quote no-group" data-username="zkessin" data-post="11" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zkessin/48/20267_2.png" class="avatar"> zkessin:</div>
<blockquote>
<p>Generally Erlang/Elixir uses pattern matching with a return value of <code>{:ok, data}</code> or <code>{:errror, error_message}</code> and you just pattern match on that</p>
</blockquote>
</aside>
<p>So you are saying that people usually use the Either Monad, but without realizing it. The issue remains, but as long as I can import a Monads library I won’t mind <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="peerreynders" data-post="13" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>you <em>can</em> use recursion but given that there is no last call optimization, iteration is the <em>right thing to do</em></p>
</blockquote>
</aside>
<p>Now, I would have to disagree here. As someone who has been doing FP in JS for over a year I can tell you there are solutions to this. You may not have Tail Call Optimization implemented, but you can do it yourself in your functions and it’s rather simple once you get the idea. I honestly can’t remember the last I used a ´for loop´ in JS, unless it was for something really performance intensive and synchronous.</p>
<aside class="quote no-group" data-username="peerreynders" data-post="13" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>So while you can push the limits (<a href="https://leanpub.com/javascriptallongesix/read" rel="noopener nofollow ugc">JavaScript Allongé, the “Six” Edition </a>), adopting an FP style almost requires that you work in parallel in a true (but not necessarily pure) FP language.</p>
</blockquote>
</aside>
<p>A really enjoyable reading. I wouldn’t call it pushing the limits, for me it was <em>merely the start</em>. Purescript and the others are fine, but with vanilla JS and using a couple of libraries you can do <strong>pure</strong> FP quite easily ( ramda, sanctuary, fluture, folktale, etc ). <em>Those</em> push the limits <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" loading="lazy" width="20" height="20"><br>
That’s how I have handled pure FP in JS until now.</p>
<aside class="quote no-group" data-username="peerreynders" data-post="13" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>Keeping in mind that piping is <em>forward function application</em> which can be used as a more pragmatic <em>variation</em> (and some would argue a more readable) variation on function composition.</p>
</blockquote>
</aside>
<p>This is confusing. A previous user just said Elixir doesn’t <em>really</em> do function composition. I still am quite surprised with this…</p>
<aside class="quote no-group" data-username="peerreynders" data-post="13" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>More accurately <em>pattern matching</em> - JavaScript only has <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment" rel="noopener nofollow ugc">destructuring</a>. <a href="http://blog.fogus.me/2011/01/12/pattern-matching-vs-destructuring-to-the-death/#comment-23455" rel="noopener nofollow ugc">Pattern matching is a conditional construct, destructuring is not </a>.</p>
</blockquote>
</aside>
<p>Indeed, my comment was simplifying the true capabilities of Elixir. Your post is gold !</p>
<aside class="quote no-group" data-username="peerreynders" data-post="13" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>No they cannot. A single function can be composed of multiple clauses. If it has the same name and the same arity it is the same function.</p>
</blockquote>
</aside>
<pre><code>def reverse( list ) do: reverse( list, [] ) end
def reverse( [], reversed ), do: reversed
def reverse( [head | tail ], reversed ), do: reverse( tail, [ head | reversed ]) 
</code></pre>
<p>Here is an example of 2 functions called <code>reverse</code>, both with the same name and same arity. Now, if I get it correctly, you mean to tell me that this <em>only</em> works because of pattern matching, and that the function’s signature is not being taken into consideration?<br>
I guess I can live with that.</p>
<aside class="quote no-group" data-username="peerreynders" data-post="13" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>Haskell is a great learning experience but it’s <em>purity</em> has an elitist flair.</p>
</blockquote>
</aside>
<p>Well, for me its purity keeps people from calling me at 3 AM in the morning because our app crashed with a side effect or worse, got into an inconsistent state because of one. I am not saying Elixir should emulate Haskell ( it was merely an example of a language in my post ) but I do believe Haskell has some things Elixir could really use.</p>
<aside class="quote no-group" data-username="peerreynders" data-post="13" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>See above. Syntax is irrelevant and lack of familiarity.</p>
</blockquote>
</aside>
<p>Ahh yes, I am well aware of the familiarity bias. That is not what is stopping me, being familiar with problems empowers you to overcome them. But I do believe that assessing syntax as irrelevant is irresponsible <em>at best</em>. If you don’t believe me, I challenge you to use <a href="http://www.jsfuck.com/" rel="noopener nofollow ugc">http://www.jsfuck.com/</a><br>
<img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji only-emoji" alt=":smiley:" loading="lazy" width="20" height="20"></p>
<p>In other words, syntax matters <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="codyclay88" data-post="14" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/codyclay88/48/11590_2.png" class="avatar"> codyclay88:</div>
<blockquote>
<p>If you are trying to write Elixir code in the same way you are writing JavaScript code then you are missing the point.</p>
</blockquote>
</aside>
<p>My dear, I wouldn’t dare. I have come a long way to know when that is happening <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" loading="lazy" width="20" height="20"><br>
That is why I joined this forum with all these wonderful people. I want to <em>learn</em> Elixir. Not to write JS using Elixir.</p>
<aside class="quote no-group" data-username="gregvaughn" data-post="16" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/gregvaughn/48/954_2.png" class="avatar"> gregvaughn:</div>
<blockquote>
<p>If you’re one that thinks proper “functional programming” has to include monads and currying, etc., then mentally put Elixir in a different language category or else you’ll remain frustrated.</p>
</blockquote>
</aside>
<p>I completely agree !</p>
<aside class="quote no-group" data-username="gregvaughn" data-post="16" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/gregvaughn/48/954_2.png" class="avatar"> gregvaughn:</div>
<blockquote>
<p>There’s more to be said about intangibles like community. I find it quite interesting that you worry enough to put “plz don’t kill me” in your subject, and I’m pleased to see in the replies no inclination to even consider doing that.</p>
</blockquote>
</aside>
<p>Let’s just say that my direct approach and my sense of humor don’t always find the best friends in forums. I don’t insult people and I always try to be respectful and light hearted, but sometime that’s not enough. I really need to get along with this community, so I am just trying to be careful.</p>
<p>Thanks !</p>
<aside class="quote no-group" data-username="chriseyre" data-post="17" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chriseyre/48/11497_2.png" class="avatar"> chriseyre:</div>
<blockquote>
<p>If you want to compare promises with simple elixir have a look at two of my projects that solve the same problem</p>
</blockquote>
</aside>
<p>Will do!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95821" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-95821" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95821"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="95823" data-post-id="95823">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="peerreynders" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/120/5826_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  peerreynders
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>Now, I would have to disagree here.</p>
</blockquote>
<p>My point was that the JavaScript runtime isn’t designed to cope with unbridled recursion regardless of the <a href="http://raganwald.com/2013/03/28/trampolines-in-javascript.html" rel="noopener nofollow ugc">available tricks</a>. Any <code>for loop</code> avoidance is largely implemented via higher order functions which hide the implementing iterative loop away from you.</p>
<blockquote>
<p>using a couple of libraries you can do pure FP</p>
</blockquote>
<ul>
<li>those libraries can cheat under the hood (not that it’s necessarily a problem) to align with the sensibilities of the JavaScript runtime</li>
<li>and they can’t ensure that your code <em>is pure</em> compared to a compiler</li>
</ul>
<blockquote>
<p>A previous user just said Elixir doesn’t really do function composition.</p>
</blockquote>
<p>Not out-of-the-box.</p>
<p><em>This adheres to our general principle that we do not provide built-in mechanisms; we provide primitives with which mechanisms can be built.</em></p>
<pre data-code-wrap="Elixir"><code class="lang-Elixir">defmodule Demo do

  def f(x) do
    x + 2
  end

  def g(x) do
    x * 3
  end

  # dynamic composition with a closure
  def compose(g,f) do
    fn (x) -&gt;
      x
      |&gt; f.()
      |&gt; g.()
    end
  end

  # "static composition"
  def g_comp_f(x) do
    x
    |&gt; f()
    |&gt; g()
  end

end

x = 5
fun = Demo.compose(&amp;Demo.g/1,&amp;Demo.f/1)

IO.inspect(fun.(x))
IO.inspect(Demo.g_comp_f(x))
</code></pre>
<pre><code class="lang-plaintext">$ elixir demo.exs
21
21
$
</code></pre>
<blockquote>
<p>Here is an example of 2 functions called reverse.</p>
</blockquote>
<p>No it is not. Those are two <strong>function clauses</strong> belonging to the same function. They are functionally equivalent to:</p>
<pre data-code-wrap="Elixir"><code class="lang-Elixir">def reverse(list, reversed) do
  case list do
    [] -&gt;
      reversed

    [head|tail] -&gt;
      reverse(tail, [head|reversed])
  end
end
</code></pre>
<p><a href="https://forum.elixirforum.com/t/multiple-guards-in-elixir/11327/11" rel="nofollow">See</a></p>
<blockquote>
<p>I do believe Haskell has some things Elixir could really use.</p>
</blockquote>
<p>Why don’t you use Haskell then? There are plenty of forum users here who know Haskell and use it whenever possible but still find Elixir/Erlang useful under many circumstances. I’d personally <em>prefer</em> if there was static typing with a real type system but it’s absence isn’t a showstopper (and I blame JavaScript for getting me used to that fact).</p>
<blockquote>
<p>But I do believe that assessing syntax as irrelevant is irresponsible at best.</p>
</blockquote>
<p>It’s meant as a “stop whining and get on with the business at hand” notion - and we are talking about Elixir/Erlang here - not JS syntax hampered by backward compatibility considerations.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95823" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-95823" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95823"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="95824" data-post-id="95824">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sanswork" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sanswork/120/39354_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sanswork
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Reading through this <a class="mention" href="/u/fl4m3ph03n1x" rel="nofollow">@Fl4m3Ph03n1x</a> your comments and replies really don’t seem to be made in good faith.</p>
<p>You call it a direct approach and your sense of humour but honestly you are just being rude and it is not surprising you find it difficult to make friends on forums with this approach.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95824" data-batch-url="/posts/batch_likers">
                        7
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-95824" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95824"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="95837" data-post-id="95837">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="AstonJ" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/AstonJ/120/15_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  AstonJ
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Fl4m3Ph03n1x" data-post="18" data-topic="16424">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/fl4m3ph03n1x/48/11709_2.png" class="avatar"> Fl4m3Ph03n1x:</div>
<blockquote>
<p>Let’s just say that my direct approach and my sense of humor don’t always find the best friends in forums.</p>
</blockquote>
</aside>
<p>Generally if you are having a serious discussion, or with people you don’t know, it’s usually best to avoid humour - unless you’re certain it won’t be taken the wrong way. (Going by your comment above though, it appears this isn’t the case in your experience… that should probably be telling you something <img src="https://forum.elixirforum.com/uploads/default/original/2X/7/776053aa22968f83c10e90c98b23aa0ddd5c9d47.gif?v=15" title=":lol:" class="emoji emoji-custom" alt=":lol:" loading="lazy" width="20" height="20">)</p>
<p>I’m also struggling to see what the purpose of this thread is. Are you trying to point out that Elixir is ‘different’, lacks some FP stuff, is peculiar in places? If so you’re not telling us anything we don’t know.</p>
<p>As has been pointed out by others, Elixir is not trying to be like Haskell (or other similar languages). It is at its most basic, simply trying to be a modern version of Erlang with some key influences from Ruby and other languages thrown in. Erlang itself was built with a very specific job in mind - one that it excels at. You could argue that Elixir is merely trying to be as close to a perfect language as its creator wanted - constraints allowing. It just happens that so many of us love it as well, warts and all.</p>
<p>If you’re wondering why, take a look at this thread:</p>
<aside class="quote" data-post="1" data-topic="14638">
  <div class="title">
    <div class="quote-controls"></div>
    <img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/astonj/48/15_2.png" class="avatar">
    <div class="quote-title__text-content">
      <a href="https://forum.elixirforum.com/t/why-elixir/14638" rel="nofollow">Why Elixir?</a> <a class="badge-category__wrapper " href="/c/chat-discussions/chat-discussions/167" rel="nofollow"><span data-category-id="167" style="--category-badge-color: #cca771; --category-badge-text-color: #FFFFFF; --parent-category-badge-color: #cca771;" data-parent-category-id="165" data-drop-close="true" class="badge-category --style-square --has-parent"><span class="badge-category__name">Discussions</span></span></a>
    </div>
  </div>
  <blockquote>
    It’s been a couple of years since we’ve had a thread like this, so here’s the 2018 edition <img width="20" height="20" src="https://forum.elixirforum.com/images/emoji/apple/blush.png?v=15" title="blush" alt="blush" class="emoji"> 

Why are you using (or loving!) Elixir in 2018?
Which resources do you recommend that do a good job of highlighting the benefits of Elixir?
  </blockquote>
</aside>

<p>And then if you are still excited about the language, I recommend learning it by reading some of the excellent books available - here are some recommendations based on what I have read or done myself, although there are of course many more (see: <a class="hashtag-cooked" href="/c/learning-resources/books/57" data-type="category" data-slug="books" data-id="57" data-style-type="square" data-ref="learning-resources:books" rel="nofollow"><span class="hashtag-icon-placeholder"><svg class="fa d-icon d-icon-square-full svg-icon svg-node"><use href="#square-full"></use></svg></span><span>Learning Resources &gt; Books</span></a> and <a class="hashtag-cooked" href="/c/learning-resources/courses/62" data-type="category" data-slug="courses" data-id="62" data-style-type="square" data-ref="learning-resources:courses" rel="nofollow"><span class="hashtag-icon-placeholder"><svg class="fa d-icon d-icon-square-full svg-icon svg-node"><use href="#square-full"></use></svg></span><span>Learning Resources &gt; Courses</span></a>)..</p>
<ul>
<li><a href="https://forum.elixirforum.com/t/programming-elixir-pragprog/5882" class="inline-onebox" rel="nofollow">Programming Elixir (Pragprog)</a></li>
<li><a href="https://forum.elixirforum.com/t/elixir-in-action-manning/5884" class="inline-onebox" rel="nofollow">Elixir In Action (Manning)</a></li>
<li><a href="https://forum.elixirforum.com/t/elixir-for-programmers-pragdave-currently-on-offer-for-30/6335" class="inline-onebox" rel="nofollow">Elixir for Programmers (PragDave)</a></li>
<li><a href="https://forum.elixirforum.com/t/learn-functional-programming-with-elixir-pragprog/5114" class="inline-onebox" rel="nofollow">Learn Functional Programming with Elixir (Pragprog)</a></li>
<li><a href="https://forum.elixirforum.com/t/programming-phoenix-pragprog/5883" class="inline-onebox" rel="nofollow">Programming Phoenix (Pragprog)</a></li>
</ul>
<p>If after reading the <a href="https://forum.elixirforum.com/t/why-elixir/14638" class="inline-onebox" rel="nofollow">Why Elixir?</a> thread you’re not enthused or you feel the language is not for you - that’s cool too. Good luck on whatever you decide to adopt.</p>
<hr>
<p><em>As a general note, if you’re new to a community it’s a good idea to put yourself in the shoes of others - and ask yourself how your comments/thread might come across. If you’re genuinely interested in helping the language, or hearing the thoughts of others, diplomacy and tact (not humour and unfair or immaterial critique) is usually the best way to achieve your goal.</em></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95837" data-batch-url="/posts/batch_likers">
                        12
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/learning-elixir-frst-impressions-plz-dont-kill-me/16424/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-95837" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95837"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/16424/load_more?page=3">Load more posts</a>
</div></template></turbo-stream>