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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>To be honest, I am working on an optimizing elixir compiler right now, on this exact problem. There are a lot of rough edges. For example, <code>map</code>’s with side-effects can be joined in the one map (as mentioned by <a class="mention" href="/u/tcoopman" rel="nofollow">@tcoopman</a> above). But my compiler can prove that side-effects won’t be possible.</p>
<p>Without any other compilers or libraries, tail-recursive functions are <strong>always</strong> the most efficient way to traverse lists. Next solution (in terms of efficiency) is <code>:lists</code> module which is inlined by the compiler with special <code>@compile</code> options.</p>
<p>UPD: Elixir’s <code>for</code> is always the <strong>slowest</strong> way to traverse the list, because it is actually translated to <code>:lists.reverse(Enum.reduce(...))</code> which performs <strong>triple</strong> list traversal</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270215" 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/enum-fusion/36193/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-270215" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270215"
                     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 #21"></div>
  </section>
</div>
    <div class="postbit" id="270226" data-post-id="270226">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="hst337" data-post="22" data-topic="36193">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/h/41988e/48.png" class="avatar"> hst337:</div>
<blockquote>
<p>But my compiler can prove that side-effects won’t be possible.</p>
</blockquote>
</aside>
<p>This was my thinking. Although the type system doesn’t encode side effects, it seemed to be that, in theory, a compiler should be able to figure out if something like a mapper inside <code>Enum.map</code> has side effects. From there, it can simply not perform pipe fusion in the presence of side effects but do it in other pure cases.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270226" 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/enum-fusion/36193/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-270226" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270226"
                     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 #22"></div>
  </section>
</div>
    <div class="postbit" id="270227" data-post-id="270227">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Nah, traditional Elixir and Erlang (and almost any beam language) compilers can’t rely on inter-module calls, because modules can be recompiled and reloaded in runtime.</p>
<p>Therefore, even if Elixir’s compiler could prove that the code inside <code>map</code> is pure, it couldn’t join two <code>Enum.map</code>s if they had any so-called remote calls</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270227" 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/enum-fusion/36193/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-270227" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270227"
                     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 #23"></div>
  </section>
</div>
    <div class="postbit" id="270239" data-post-id="270239">
  <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">
								<aside class="quote no-group" data-username="hst337" data-post="22" data-topic="36193">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/h/41988e/48.png" class="avatar"> hst337:</div>
<blockquote>
<p>Without any other compilers or libraries, tail-recursive functions are <strong>always</strong> the most efficient way to traverse lists.</p>
</blockquote>
</aside>
<p>If by “efficient” you mean either fast or least amount of memory used than this is not correct. For as long as you’re not running out of memory and stacks it’s likely that body recursion beats tail recursion on both metrics.</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://ferd.ca/erlang-s-tail-recursion-is-not-a-silver-bullet.html">
  <header class="source">
      <img src="https://ferd.ca/static/img/favicon.ico" class="site-icon" alt="" width="16" height="16">

      <a href="https://ferd.ca/erlang-s-tail-recursion-is-not-a-silver-bullet.html" target="_blank" rel="noopener nofollow">ferd.ca</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://ferd.ca/erlang-s-tail-recursion-is-not-a-silver-bullet.html" target="_blank" rel="noopener nofollow">Erlang's Tail Recursion is Not a Silver Bullet</a></h3>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270239" 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/enum-fusion/36193/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-270239" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270239"
                     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 #24"></div>
  </section>
</div>
    <div class="postbit" id="270240" data-post-id="270240">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I mean the special list-traversal type of tail recursion which looks something like</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defp increase([head | tail]) do
  [head + 1 | increase(tail)]
end
defp increase([]), do: []
</code></pre>
<p>This is the <strong>fastest</strong> and the most memory efficient way to traverse a list</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270240" 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/enum-fusion/36193/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-270240" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270240"
                     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 #25"></div>
  </section>
</div>
    <div class="postbit" id="270241" data-post-id="270241">
  <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>That’s body recursion, given the recursive call is not the last expression in the function body.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270241" 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/enum-fusion/36193/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-270241" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270241"
                     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 #26"></div>
  </section>
</div>
    <div class="postbit" id="270243" data-post-id="270243">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>What ferd wrote in his blog post is not a body recursion. Erlang compiler actually performs tricky optimization where it deletes the stack frame as in tail recursion and just points the list head pointer on the return of the last call.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270243" 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/enum-fusion/36193/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-270243" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270243"
                     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 #27"></div>
  </section>
</div>
    <div class="postbit" id="270244" data-post-id="270244">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This is de facto tail recursion. Any code which makes it impossible to drop the stack frame (like <code>throw</code>) will make this function slower</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270244" 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/enum-fusion/36193/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-270244" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270244"
                     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 #28"></div>
  </section>
</div>
    <div class="postbit" id="270249" data-post-id="270249">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="josevalim" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/120/1787_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  josevalim
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Elixir</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="hst337" data-post="22" data-topic="36193">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/h/41988e/48.png" class="avatar"> hst337:</div>
<blockquote>
<p>UPD: Elixir’s <code>for</code> is always the <strong>slowest</strong> way to traverse the list, because it is actually translated to <code>:lists.reverse(Enum.reduce(...))</code> which performs <strong>triple</strong> list traversal</p>
</blockquote>
</aside>
<p>Apologies, this is not <em>generally</em> true and potentially bad advice.</p>
<p>First of all, it performs a <em>double</em> traversal: one on reduce, another on reverse (which is optimized in C). It is classic tail recursion.</p>
<p>Second, <code>for</code> can perform map+filtering+flattening in one step, so as soon as you start piping into multiple Enum and Stream, <code>for</code> should win by considerable margins.</p>
<p>The only case where <code>for</code> is faster is when you are using it only for <em>filtering or mapping a single list</em>. And when we do so, the margins are <em>very thin</em>, <a href="https://ferd.ca/erlang-s-tail-recursion-is-not-a-silver-bullet.html" rel="nofollow">as explained in Fred’s article</a>.</p>
<p>In other words, <code>for</code> can be considerably faster in several use cases, and slower by thin margins in one case.</p>
<aside class="quote no-group" data-username="hst337" data-post="28" data-topic="36193">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/h/41988e/48.png" class="avatar"> hst337:</div>
<blockquote>
<p>Erlang compiler actually performs tricky optimization where it deletes the stack frame as in tail recursion and just points the list head pointer on the return of the last call.</p>
</blockquote>
</aside>
<p>As far as I know, Erlang does not perform this. It generally eliminates stack frames as part of body recursion but it does not perform any special behaviour for lists. Looking at the BEAM assembly I see no hints for this either:</p>
<pre data-code-wrap="erlang"><code class="lang-erlang">bar([H | T]) -&gt; [H * 2 | bar(T)];
bar([]) -&gt; [].
</code></pre>
<pre data-code-wrap="erlang"><code class="lang-erlang">{function, bar, 1, 2}.
  {label,1}.
    {line,[{location,"foo.erl",4}]}.
    {func_info,{atom,foo},{atom,bar},1}.
  {label,2}.
    {test,is_nonempty_list,{f,3},[{x,0}]}.
    {get_list,{x,0},{x,1},{x,0}}.
    {gc_bif,'*',{f,0},2,[{x,1},{integer,2}],{x,1}}.
    {allocate,1,2}.
    {move,{x,1},{y,0}}.
    {call,1,{f,2}}. % bar/1
    {'%',{var_info,{x,0},[{type,{t_list,number,nil}}]}}.
    {test_heap,2,1}.
    {put_list,{y,0},{x,0},{x,0}}.
    {deallocate,1}.
    return.
  {label,3}.
    {test,is_nil,{f,1},[{x,0}]}.
    return.
</code></pre>
<p>However, my knowledge may be out of date. Maybe the JIT performs new tricks? So pointers will be appreciated in such case.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270249" 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/enum-fusion/36193/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-270249" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270249"
                     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 #29"></div>
  </section>
</div>
    <div class="postbit" id="270252" data-post-id="270252">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve benchmarked all of this several times and nothing beats so-called “body” recursive variant even on &lt;10^5 lists</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule X do

  @compile :inline_list_funcs

  def increase([head | tail]) do
    [head + 1 | increase tail]
  end
  def increase([]), do: []

  def tail_increase([head | tail], acc) do
    tail_increase(tail, [head + 1 | acc])
  end
  def tail_increase(_, acc), do: :lists.reverse(acc)

  def for_increase(list) do
    for i &lt;- list, do: i + 1
  end

  def enum(list) do
    Enum.map(list, fn x -&gt; x + 1 end)
  end

  def lists(list) do
    :lists.map(fn x -&gt; x + 1 end, list)
  end

end

list = Enum.to_list 1..100_000

%{
  "tail" =&gt;  fn -&gt; X.tail_increase(list, []) end,
  "body" =&gt;  fn -&gt; X.increase(list) end,
  "for" =&gt;   fn -&gt; X.for_increase(list) end,
  "enum" =&gt;  fn -&gt; X.enum(list) end,
  "lists" =&gt; fn -&gt; X.lists(list) end
}
|&gt; tap(fn tests -&gt;
  1 = length Enum.uniq Enum.map(tests, fn {_, f} -&gt; f.() end)
end)
|&gt; Benchee.run(time: 10, warmup: 2)

"""
body         907.08        1.10 ms    ±14.56%        1.12 ms        1.43 ms
tail         580.20        1.72 ms    ±35.70%        1.79 ms        3.19 ms
enum         503.79        1.98 ms    ±17.27%        1.91 ms        3.14 ms
lists        495.31        2.02 ms     ±8.98%        2.04 ms        2.50 ms
for          436.56        2.29 ms    ±30.84%        2.30 ms        4.31 ms

Comparison:
body         907.08
tail         580.20 - 1.56x slower +0.62 ms
enum         503.79 - 1.80x slower +0.88 ms
lists        495.31 - 1.83x slower +0.92 ms
for          436.56 - 2.08x slower +1.19 ms
"""
</code></pre>
<p>For bigger lists, nested lists, and filter-map <code>for</code> is still 20-60% behind the recursive private functions variant.</p>
<hr>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="30" data-topic="36193">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar"> josevalim:</div>
<blockquote>
<p>As far as I know, Erlang does not perform this</p>
</blockquote>
</aside>
<p>Yeah, I might be wrong. I thought I saw this in erlang docs.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="270252" 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/enum-fusion/36193/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-270252" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="270252"
                     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 #30"></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/36193/load_more?page=4">Load more posts (13 remaining)</a>
</div></template></turbo-stream>