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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                      <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 class="user-title">
									<span>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>No, Solution does not overload any operators.</p>
<p>The choice was made to keep in line with Elixir’s own decision to use <code>with</code> statements as a more explicit alternative to ‘short-circuiting pipes’. The only change that Solution does w.r.t. the built-in versions of Elixir’s <code>with</code> (and <code>case</code>) is that the caller of a function does no longer have to care how many elements the returned tuple has, but only if it is an <code>ok</code> or an <code>error</code>.</p>
<p>If you really want short-circuiting pipe operators, I’d suggest either you look at <a href="https://forum.elixirforum.com/t/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-0/21980/5" rel="nofollow">this post earlier in this topic</a> for a comparison of the various libraries that have making ok/error tuples nicer to work with as goal. Many of them do either overload the pipe operator, introduce a new operator, or introduce a ‘monadic do’-style syntax.</p>
<p>EDIT: That said, it also is possible to define your own custom pipe-like operator on top of the <code>is_ok</code>/<code>is_error</code> guards that Solution provides (which, as mentioned, let you match any of<code>:ok</code>, <code>{:ok, val}</code>, <code>{:ok, val, meta}</code>, <code>{:ok, val, meta, other}</code>, etc and similarly for <code>is_error</code>). Let me conjure up a code snippet for you…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="148400" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-148400" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="148400"
                     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="148405" data-post-id="148405">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                      <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 class="user-title">
									<span>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Here you are <img src="https://forum.elixirforum.com/images/emoji/apple/slightly_smiling_face.png?v=15" title=":slightly_smiling_face:" class="emoji" alt=":slightly_smiling_face:" loading="lazy" width="20" height="20"></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule ShortCircuitingPipe do
  require Solution

  @doc """
  A pipeline-like operator wrapping `is_ok/1`,
  so it will short-circuit as soon as a value that is not one of:
  - `{:ok, val}`
  - `{:ok, val, meta}`
  - a tuple with more elements whose first element is `:ok`

  is passed.

      iex&gt; require ShortCircuitingPipe
      iex&gt; import ShortCircuitingPipe
      iex&gt; {:ok, %{a: 42}} ~&gt; Map.fetch(:a) ~&gt; fn x -&gt; {:ok, x * 2} end.()
      {:ok, 84}

      iex&gt; require ShortCircuitingPipe
      iex&gt; import ShortCircuitingPipe
      iex&gt; {:error, :boom} ~&gt; Map.fetch(:a) ~&gt; fn x -&gt; {:ok, x * 2} end.()
      {:error, :boom}

      iex&gt; require ShortCircuitingPipe
      iex&gt; import ShortCircuitingPipe
      iex&gt; {:ok, %{a: 42}} ~&gt; Map.fetch(:unexistent) ~&gt; fn x -&gt; {:ok, x * 2} end.()
      :error

  Note that only `val` (the element at index `1` in the tuple)
  will be passed on to the next stage of the pipeline:


      iex&gt; require ShortCircuitingPipe
      iex&gt; import ShortCircuitingPipe
      iex&gt; {:ok, "I", "have", "many", "elements"} ~&gt; fn(x) -&gt; [x, x] end.()
      ["I", "I"]

  Also note that just passing `:ok` will not be matched in this case,
  since there is no `value` to pass on to the next stage of the pipeline.

      iex&gt; require ShortCircuitingPipe
      iex&gt; import ShortCircuitingPipe
      iex&gt; :ok ~&gt; fn (x) -&gt; [x, x] end.()
      :ok

  """
  defmacro lhs ~&gt; {call, line, args} do
    # Prepend a variable that will be called 'value' to the list of arguments,
    # to be used in the happy path.
    value = quote do: value
    prepended_args = [value | args || []]

    quote do
      Solution.scase unquote(lhs) do
        ok(value) -&gt; unquote({call, line, prepended_args})
        other -&gt; other
      end
    end
  end
end

</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="148405" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-148405" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="148405"
                     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="148418" data-post-id="148418">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi there</p>
<p>Thanks for the response, and the code you supplied.<br>
I am rather new to Elixir (and fp in general), so I still have some way to go to finding my feet.</p>
<p>As far as I can see, I do need to handle multiple data items (e.g. <code>{:ok, "more", "than", "one", "item"}</code>) in the return (perhaps I’ll figure a better way out in the future?). And it looks like Solution is only error-handling lib that deals with this use case.<br>
Given that <code>with</code> is the officially “mandated” pipeline short-circuiting way, I’m gonna give Solution’s <code>swith</code> a whirl. My code base is pretty tiny at the moment, so changing the error handling is not a huge effort.</p>
<p>Wish me luck!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="148418" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-148418" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="148418"
                     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="148424" data-post-id="148424">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Sorry if this is a stupid question, but does/can Solution handle boolean functions?</p>
<p>As a silly example:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  def valid_input?(input) when is_binary(input) do
    String.contains?("secret token:")
  end

  def valid_input?(input) do
    false
  end
</code></pre>
<p>Or do we have to explicitly convert the boolean result to an :ok/:error atom (or tuple, where appropriate)?</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">
  def valid_input?(input) when is_binary(string) do
     case String.contains?("secret token:") do
       true -&gt; :ok
       false -&gt; :error
     end
  end

  def valid_input?(_) do
    :error
  end
</code></pre>
<p>Which, at the end of the day, I wanna call like this:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">
 def do_stuff(input) do
    swith ok(res1) &lt;- valid_input?(input),
          ok(res2) &lt;- do_next_thing(input),
          ok(res3) &lt;- do_another_thing(res2) do
      "Life is good with #{res3}"
      else
      _ -&gt; "Run for the hills"
    end

  end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="148424" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-148424" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="148424"
                     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="148459" data-post-id="148459">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                      <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 class="user-title">
									<span>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>In the same way as a normal <code>with</code>, you can match on e.g. <code>true</code> instead. (and potentially alter <code>false</code> in the <code>else</code> clause to something more descriptive)</p>
<pre data-code-wrap="elixir"><code class="lang-elixir"> def do_stuff(input) do
    swith true &lt;- valid_input?(input),
          ok(res2) &lt;- do_next_thing(input),
          ok(res3) &lt;- do_another_thing(res2) do
      "Life is good with #{res3}"
      else
        _ -&gt; "Run for the hills"
    end
  end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="148459" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-148459" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="148459"
                     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 #15"></div>
  </section>
</div>
    <div class="postbit" id="148498" data-post-id="148498">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yes of course! That makes perfect sense. Thanks <img src="https://forum.elixirforum.com/images/emoji/apple/grinning.png?v=15" title=":grinning:" class="emoji" alt=":grinning:" loading="lazy" width="20" height="20"></p>
<p>I’m running into a slight problem with <code>scase</code> and <code>alias</code>ed module names. I’m not sure if I’m doing something wrong. Here follows a simple test case to demonstrate the issue.</p>
<p>First I define a simple module:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(1)&gt; defmodule Domain.Module1 do
...(1)&gt;   def wrap(something) do
...(1)&gt;     {:ok, something}
...(1)&gt;   end
...(1)&gt; end
</code></pre>
<p>Then alias it and ensure the alias works:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(5)&gt; alias Domain.Module1
Domain.Module1
iex(6)&gt; Module1.wrap("asdf")
{:ok, "asdf"}
</code></pre>
<p>Now we test with a normal <code>case</code> statement:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(7)&gt; case Module1.wrap("asdf") do
...(7)&gt; 
...(7)&gt;   {:ok, stuff} -&gt; "All good in the 'hood: #{stuff}"
...(7)&gt; 
...(7)&gt;   _ -&gt; "Ehh... what happened?"
...(7)&gt; 
...(7)&gt; end
"All good in the 'hood: asdf"
</code></pre>
<p>All fine so far. Now the equivalent <code>scase</code>:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(9)&gt; import Solution
Solution
iex(10)&gt; scase Module1.wrap("asdf") do
...(10)&gt; 
...(10)&gt;   ok(stuff) -&gt; "All good in the 'hood: #{stuff}"
...(10)&gt; 
...(10)&gt;   _ -&gt; "Ehh... what happened?"
...(10)&gt; 
...(10)&gt; end
** (UndefinedFunctionError) function Module1.wrap/1 is undefined (module Module1 is not available)
    Module1.wrap("asdf")
iex(10)&gt;
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="148498" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-148498" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="148498"
                     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="150392" data-post-id="150392">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                      <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 class="user-title">
									<span>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thank you! This is an interesting problem. It indeed seems like some odd behaviour is going on here.</p>
<p>It would be very helpful if you could open up an issue for it on the repository <img src="https://forum.elixirforum.com/images/emoji/apple/blush.png?v=15" title=":blush:" class="emoji" alt=":blush:" 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="150392" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-150392" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="150392"
                     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="150556" data-post-id="150556">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Issue opened <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="150556" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-150556" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="150556"
                     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="151494" data-post-id="151494">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                      <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 class="user-title">
									<span>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>As a heads-up: the issue has been resolved! <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>Version 1.0.1 has been released.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151494" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-151494" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151494"
                     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="152111" data-post-id="152111">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Awesome! Thanks a million <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> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="152111" 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/solution-library-to-do-pattern-matching-with-general-ok-error-types-in-case-with-statements-v1-0-1/21980/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-152111" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="152111"
                     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>