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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Oh sorry, ya, your example is what I meant to do—that’s what I get for not copy-pasting from the REPL.  It mirrored my Elixir example (as much as you could call that mirroring).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367516" 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/how-would-you-explain-elixir-immutability/47323/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-367516" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367516"
                     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 #32"></div>
  </section>
</div>
    <div class="postbit" id="367518" data-post-id="367518">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="LostKobrakai" data-post="31" data-topic="47323">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lostkobrakai/48/3072_2.png" class="avatar"> LostKobrakai:</div>
<blockquote>
<p>Essentially <code>immutability</code> is equal to having <code>pass by value</code> everywhere and no <code>pass by reference</code>. That’s the model upheld by the VM.</p>
</blockquote>
</aside>
<p>It would perhaps be better to describe it as having “copy-on-write” everywhere; it is perfectly fine to pass a reference around as long as you never mutate the thing being referenced - and hey, that’s what <em>immutability</em> refers to <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>In practice the runtime passes references around all the time, which is super important for performance. But they are always copy-on-write. Note that we can construct more advanced COW data structures out of the primitives the language gives us. For example:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">a = "foo"
b = "bar"
c = "baz"

l1 = {a, nil}
l2 = {b, l1}
l3 = {c, l2}

dbg l3 # -&gt; {"baz", {"bar", {"foo", nil}}}
</code></pre>
<p>Those strings and tuples shouldn’t be duplicated in memory. Hey wait a minute, <a href="https://aphyr.com/posts/340-reversing-the-technical-interview" rel="noopener nofollow ugc">is that a linked list</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="367518" data-batch-url="/posts/batch_likers">
                        0
                      </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/how-would-you-explain-elixir-immutability/47323/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-367518" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367518"
                     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 #33"></div>
  </section>
</div>
    <div class="postbit" id="367521" data-post-id="367521">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I wouldn’t necessarily call this “better described” because my argument is exactly that you don’t need to care. For the mental model it doesn’t matter at all when copies are created – as long as they’re created often enough that all intermediate values interacted with remain.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367521" 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/how-would-you-explain-elixir-immutability/47323/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-367521" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367521"
                     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 #34"></div>
  </section>
</div>
    <div class="postbit" id="367524" data-post-id="367524">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="32" data-topic="47323">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<pre data-code-wrap="elixir"><code class="lang-elixir"># Elixir
a = %{"foo" =&gt; "bar"}
b = a
b = Map.put(b, "foo", "hello world!")
# Or: b = Map.put(a, "foo", ...)

dbg a # -&gt; %{"foo" =&gt; "bar"}
dbg b # -&gt; %{"foo" =&gt; "hello world!"}
</code></pre>
</blockquote>
</aside>
<p>This to me does not explain immutability. You can have the same code in any mutable language, as you can write a function that returns an updated copy of the input data. Immutability is not not enforced at the language level but below.</p>
<p>Maybe the best way to learn for people is not to give them explanations but an exercise:</p>
<p>Given that code</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">a = 1
f.(a)
IO.inspect(a)
</code></pre>
<p>Write a definition of the function <code>f</code> so the last line prints “2”. You can use anything you want.</p>
<p>And let them struggle for a while <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"> doing their research to understand it fully.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367524" 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/how-would-you-explain-elixir-immutability/47323/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-367524" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367524"
                     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 #35"></div>
  </section>
</div>
    <div class="postbit" id="367526" data-post-id="367526">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>That’s because I messed up my example and also that it’s impossible to give an exact reproduction in Elixir just because it’s impossible—moreover, I was no longer talking about rebinding.  I was trying to make a point similar to Benjamin’s: in any mutable language, some function can transparently change a data structure out from under you whereas that is just not possible in Elixir, there’s not even an escape hatch.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367526" 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/how-would-you-explain-elixir-immutability/47323/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-367526" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367526"
                     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 #36"></div>
  </section>
</div>
    <div class="postbit" id="367531" data-post-id="367531">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sodapopcan" data-post="37" data-topic="47323">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/48/34668_2.png" class="avatar"> sodapopcan:</div>
<blockquote>
<p>it’s impossible to give an exact reproduction in Elixir just because it’s impossible</p>
</blockquote>
</aside>
<p>If you were feeling exceptionally evil you could write a macro which replaces variables with calls to the process dictionary…</p>
<aside class="quote no-group" data-username="lud" data-post="36" data-topic="47323">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lud/48/14382_2.png" class="avatar"> lud:</div>
<blockquote>
<p>You can have the same code in any mutable language, as you can write a function that returns an updated copy of the input data</p>
</blockquote>
</aside>
<p>Mhm, that’s what I was trying to demonstrate in the third code block. Personally I find thinking of data structures as copy-on-write to be easiest to understand, but everyone learns differently so having as many explanations as possible is always beneficial <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367531" data-batch-url="/posts/batch_likers">
                        2
                      </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/how-would-you-explain-elixir-immutability/47323/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-367531" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367531"
                     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 #37"></div>
  </section>
</div>
    <div class="postbit" id="367544" data-post-id="367544">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>lud, no idea how I missed your post before I replied.<br>
OK, so that makes a lot more sense.<br>
I wish that was more clearly explained in Elixir in Action, unless it is explained more fully later on.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367544" 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/how-would-you-explain-elixir-immutability/47323/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-367544" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367544"
                     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 #38"></div>
  </section>
</div>
    <div class="postbit" id="367546" data-post-id="367546">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks everyone, much clearer now.<br>
It seems as though this also relates to the Style of programming?<br>
I get the impression I am not going to be able to program in quite the same fashion as one might in Python, C, etc?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367546" data-batch-url="/posts/batch_likers">
                        0
                      </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/how-would-you-explain-elixir-immutability/47323/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-367546" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367546"
                     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 #39"></div>
  </section>
</div>
    <div class="postbit" id="367551" data-post-id="367551">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Depends how you write code in the other languages you mentioned. It’s not a significant switch if you already write modular function based code in the other languages.</p>
<p>You can do stuff like the below to “mutate” an original value even though you are technically replacing it to align with how you likely code normally.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  def update(%{record: record} = assigns, socket) do
    socket = socket
    |&gt; assign(:flash_map, flash_map())

    form_update(Group, record, assigns, socket)
  end
</code></pre>
<p>Technically the above is same as the below, but on paper in the above you have “mutated” the original socket in an immutable way. The main difference with the below is that you could access the original socket by using <code>socket</code> after the updated_socket has been created. It’s not used in the below, but it’s fairly common in Elixir to take a starting value, and use it multiple times to create new values without changing the starting value.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  def update(%{record: record} = assigns, socket) do
    updated_socket = socket
    |&gt; assign(:flash_map, flash_map())

    form_update(Group, record, assigns, updated_socket)
  end
</code></pre>
<p>If you did the next example however, the original socket will be used, because all thats happening is the value of the socket is being updated, but never assigned to a new immutable value.</p>
<p>Below, the socket is never replaced, by using <code>something = socket</code>, so even though the socket has the flash_map assigned to it, it never actually updates the original socket value.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  def update(%{record: record} = assigns, socket) do
    socket
    |&gt; assign(:flash_map, flash_map())

    form_update(Group, record, assigns, socket)
  end
</code></pre>
<p>With regards to functional programming, most people are likely here because of how simple it is to follow so you will unlikely have many issues.</p>
<p>If you look at the example below it shows a basic functional example. You pass some params, check the values, call a function based on the result, repeat until the flow is complete. Functional programming allows you to break code down into bitesize reusable chunks like the <code>increment_reply_count</code>.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">##########################################################
####  Reply Count :  Handle  |  Create  |  Increment  ####
##########################################################

  defp create_redix_reply_metrics(key, ancestor_id, parent_id, date) do
    case Redix.command(:redix, ["EXISTS", key]) do
      {:ok, 0} -&gt;
        comment = Replies.get_reply(ancestor_id, parent_id, PhxieScylla.convert_date(date))

        if comment do
          Redix.pipeline(:redix, [
            ["HSET", key, "vote_count",     comment["vote_count"]],
            ["HSET", key, "vote_milestone", comment["vote_milestone"]],
            ["HSET", key, "reply_count",    comment["reply_count"]],
            
            # Primary Key Values
            ["HSET", key, "ancestor_id",    ancestor_id],
            ["HSET", key, "parent_id",      parent_id],
            ["HSET", key, "created_at",     date]
          ])
        else
          {:error, :no_comment}
        end
      _ -&gt; 
        :ok
    end
  end

  #################################
  ####  Reply Count :  Handle  ####
  #################################

  def handle_reply_count(reply_id, ancestor_id, parent_id, date) do
    key = "reply:#{reply_id}:metrics"

    case Redix.command(:redix, ["HGETALL", key]) do
      {:ok, []} -&gt; create_reply_count(key, ancestor_id, parent_id, date)
      {:ok, _}  -&gt; increment_reply_count(key)
    end
  end

  #################################
  ####  Reply Count :  Create  ####
  #################################

  defp create_reply_count(key, ancestor_id, parent_id, date) do
    with {:ok, _metrics} &lt;- create_redix_reply_metrics(key, ancestor_id, parent_id, date) do
      increment_reply_count(key)
    end
  end

  ###################################
  ####  Reply Count : Increment  ####
  ###################################

  defp increment_reply_count(key) do
    Redix.command(:redix, ["HINCRBY", key, "reply_count", "1"])
  end
</code></pre>
<p>Also, another basic explanation and example of mutable vs immutable:</p>
<p>Mutable = Update Value<br>
Immutable = Replace Value</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">if x = 1

Mutable:
x + 1 = 2
x is now 2

Immutable:
x + 1 = y
y is used in place of x as a replaced value
</code></pre>
<p>When you write functions with immutable values, you basically just create new values each time, whilst keeping the original value intact.</p>
<p>Rather than change the original value, you create an updated copy based on the original value whilst leaving the original value so that it can be used elsewhere in the code.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367551" 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/how-would-you-explain-elixir-immutability/47323/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-367551" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367551"
                     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 #40"></div>
  </section>
</div>
    <div class="postbit" id="367700" data-post-id="367700">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thank you very much, that is very useful.</p>
<p>I think you hit the nail on the head with the modular function based code.  Its not entirely clear ATM, however it does seem as though FP like this does seem to have the potential to make some things simpler.<br>
Appreciate the info.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="367700" data-batch-url="/posts/batch_likers">
                        0
                      </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/how-would-you-explain-elixir-immutability/47323/42">Post #41</a>
	                </div>
	            </div>
              <div id="likers-container-367700" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="367700"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>