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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think you all are being too harsh on OP here, he spotted a problem and offered his take on it. Let the guy live, he doesn’t deserve the death sentence you are giving him. <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>
<p><a class="mention" href="/u/imnotavirus" rel="nofollow">@ImNotAVirus</a> I do understand the motivation for your library but I’d be personally against using it in its current form because to me it introduces ambiguity and conditions in pipes, and overall just increases code size without offering clarity of intent in return. Furthermore, the problem statement is to me minor; I never found it problematic to have my guard up and properly catch singular <code>:ok</code> / <code>:error</code> atoms. <img src="https://forum.elixirforum.com/images/emoji/apple/person_shrugging.png?v=15" title=":person_shrugging:" class="emoji" alt=":person_shrugging:" loading="lazy" width="20" height="20"> It’s part of the job, plus we have Dialyzer, plus we have “Go to definition” and “Go back” in our IDEs, so… I don’t know. The problem does not seem major to me.</p>
<p>IMO if you want to push the library ahead then you should aim for ultra mega hyper terseness; not just the <code>to_result</code> renaming that you said you’ll adopt, but also you should have only 2-3 functions in the library that do practically everything that your current separate functions are doing right now.</p>
<p>My points:</p>
<ul>
<li>
<p>You want to call functions that are not guaranteed to return proper <code>{:ok, value}</code> / <code>{:error, reason}</code> tuples? Use a singular library function e.g. <code>ok_err</code> (or <code>to_result</code>) that absolutely always will return the proper tuple regardless of what is fed to it.</p>
</li>
<li>
<p>You want to have custom validation / error reporting functionality? Well, IMO that is another library. Your post (and likely the library as well) seems to be mixing concerns.</p>
</li>
<li>
<p>The Elixir community usually resists usage of such libraries because (a) most teams feel that doing what the library does is trivial enough and (b) nobody wants to adopt new idioms without a very clear value proposition.</p>
</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="318459" 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/std-result-a-way-to-standardize-function-returns/61719/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-318459" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318459"
                     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="318461" data-post-id="318461">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dorgan" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dorgan/120/22107_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dorgan
                  </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="21" data-topic="61719">
<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>I feel that a lot of people coming to Elixir from OO, particularly Ruby, have been burned by the gross overuse of single-use private functions. I feels that many have the perfectly common human response to revolt by going <em>too</em> much the other direction.</p>
</blockquote>
</aside>
<p>I have the luck of not having to deal with any of that before coming to Elixir, and I’m not against splitting things into private functions per se, I’m against being forced(or rather, encouraged) by the language or libraries to do so be it because of formatting or because that’s just the path of least resistance. The length of the function is of little concern to me, really. I’m forming this opinion after <em>years</em> of writing Elixir. One thing is to write a private function because it makes sense to you or it warrants being its own thing, a completely different thing is to have to do that because it is required by library code, or not doing so makes the code hard to follow and/or format badly.</p>
<aside class="quote no-group" data-username="sodapopcan" data-post="21" data-topic="61719">
<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>But for me, it’s not really about big names it’s more whether or not it will ever make it into the language that I would continue to use it. It’s funny you mention the transact thread because I’ve been following along and, even though Ecto is a library itself and I <em>do</em> find Ecto.Multi a bit clunky at times, it’s so ubiquitous that I’d have a hard time adopting transact in my own projects.</p>
</blockquote>
</aside>
<p>You wrote what I meant, but better <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"> When more than one solution to a problem exists, it’s easier to adopt something when it’s already mainstream and there’s tons of ways of rationalizing it, even if there’s probably a better solution around the corner.</p>
<aside class="quote no-group" data-username="sodapopcan" data-post="21" data-topic="61719">
<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>But when teams pull in libraries just to make something “a little more like other functional languages” I find it a bit annoying.</p>
</blockquote>
</aside>
<p>Doing that for the sake of it rarely works out well in my experience. Taking inspiration from other languages to design something that fits with the language you’re working on is good though. A lot of elixir constructs were born this way.</p>
<aside class="quote no-group" data-username="dimitarvp" data-post="22" data-topic="61719">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>I think you all are being too harsh on OP here, he spotted a problem and offered his take on it.</p>
</blockquote>
</aside>
<p>I support them creating the library and sharing it! Most of the code I’ve seen contain some variation of what the library offers, so it’s clear to me it’s something people deal with a lot. that it’s discussed and solutions are proposed is always great</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="318461" 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/std-result-a-way-to-standardize-function-returns/61719/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-318461" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318461"
                     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="318473" data-post-id="318473">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ImNotAVirus" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ImNotAVirus/120/14224_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ImNotAVirus
                    <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>Don’t worry, I can take criticism. I’m well aware that this library is a very personal point of view. Honestly, I didn’t expect anyone to use it when I published it. I just wanted to share it because I wish I’d had it years ago, so I’m thinking it might be useful to someone one day.</p>
<p>The personal point is, before discovering <code>with</code> which was recent and not necessarily widespread when I started Elixir, I had come across <a href="https://medium.com/elixirlabs/railway-oriented-programming-in-elixir-with-pattern-matching-on-function-level-and-pipelining-e53972cede98" rel="noopener nofollow ugc">this article</a> when it first came out which talked about <a href="https://blog.logrocket.com/what-is-railway-oriented-programming/" rel="noopener nofollow ugc">Railway Oriented Programming</a>.</p>
<p>I was immediately hooked on the design and then had a hard time switching to <code>with</code> a few months later when I learned of its existence. At the time, and still very often today, I found its syntax rather complicated to read, even more so when the pattern match types are different and even more when you have to process them in the <code>else</code>.</p>
<p>In my opinion, one of the disadvantages of ROP is that where <code>with</code> is verbose in the function that makes the pattern matching, ROP deports this verbosity to the functions called.</p>
<p>I’ve been doing Elixir for several years now, and it’s almost the only language I’ve touched in a long time. I’ve hardly ever done Rust in my life.</p>
<p>So how did this library come about?<br>
I was developing a feature for work where I needed to make a kind of validation pipeline for some data. I first wrote it with a <code>with</code> as usual, but I didn’t like the result. Then I rethought about ROP (I hadn’t done one for several years now). So I rewrote the functionality and asked my colleagues whether they preferred the version with a <code>with</code> or the ROP version.<br>
One of my colleagues gave me a very interesting thought when he told me that what I wanted to do was similar to what Rust and its Results offered. So I took a look at the API and, as with the ROP, I was immediately hooked. So I rewrote the API as Elixir.</p>
<p>So I’m like a lot of you guys. I’ve been doing Elixir for several years now, I’ve hardly ever done Rust but yet this API suits me just fine. This is the design choice I’ve made, and from my point of view, I find it more appropriate than <code>with</code> in some cases. But I don’t expect you to do the same.</p>
<p>This article explains my point of view quite well too: <a href="https://cbailey.co.uk/posts/elixirs_with_statement_and_railway_oriented_programming" class="inline-onebox" rel="noopener nofollow ugc">Home · vereis.com</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="318473" 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/std-result-a-way-to-standardize-function-returns/61719/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-318473" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318473"
                     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="318503" data-post-id="318503">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>If you imply that using bang functions that raise instead of <code>with</code> is more readable, I completely disagree (at least this is what I understood from that article), otherwise the other examples showed there use <code>with</code> too.</p>
<p>Exception handling as control flow is unreadable and hard to debug. Why? It is simply because they are global, even if you catch them locally. I understand the appeal of having custom exceptions defined, however we are coming once around to types, specs and having a convention.</p>
<p>There are places where you want your process to crash, some errors can’t be handled, that’s when you want to use bang functions. <code>with</code> is used when you want to short-circuit a pipe, having the option of dealing with the error. Also, since <code>with</code> is a expression you can use its return value, it is not uncommon to have this kind of code:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">with {:ok, token} &lt;- fetch_token(),
        :ok &lt;- check_validity(token),
        :ok &lt;- check_signature(token) do
   ...yaaay
else
     _ -&gt; {:error, :invalid_token}
end
</code></pre>
<p>You don’t care about the specific error and return a new error that makes sense for you, this is IMO the greatest power of <code>with</code> expression.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="318503" 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/std-result-a-way-to-standardize-function-returns/61719/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-318503" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318503"
                     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="318526" data-post-id="318526">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="ImNotAVirus" data-post="6" data-topic="61719">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/imnotavirus/48/14224_2.png" class="avatar"> ImNotAVirus:</div>
<blockquote>
<p><strong>Solution 2</strong>: wrap functions into another that returns a <code>:ok</code> / <code>:error</code> tuple</p>
<p><code>with :ok &lt;- validate_user_exists(updated_user.id),</code></p>
</blockquote>
</aside>
<p>To reduce the amount of function splits and these micro-functions, I use a helper function called <code>validate</code>, which transforms a boolean into <code>:ok | {:error, reason}</code>:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">def validate(true, _reason), do: :ok
def validate(false, reason), do: {:error, reason}
</code></pre>
<p>And now you can write</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">with :ok &lt;- validate(User.exists?(updated_user.id), :not_found), ...
</code></pre>
<p>It doesn’t solve all the problems you mention, but it can often help avoiding micro-functions and keep the logic in a single place, for the price of a small function whose semantics are easy to grasp. I’ve introduced it to multiple teams and programmers with different experience levels, and it worked quite well, especially in combination with <code>Repo.transact</code> mentioned in another thread.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="318526" 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/std-result-a-way-to-standardize-function-returns/61719/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-318526" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318526"
                     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="318528" data-post-id="318528">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ImNotAVirus" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ImNotAVirus/120/14224_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ImNotAVirus
                    <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>I’m not talking about bang function nor exception here. They have their own uses and have nothing to do with <code>with</code>.</p>
<aside class="quote no-group" data-username="D4no0" data-post="25" data-topic="61719">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/d4no0/48/33624_2.png" class="avatar"> D4no0:</div>
<blockquote>
<p>Also, since <code>with</code> is a expression you can use its return value, it is not uncommon to have this kind of code:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">with {:ok, token} &lt;- fetch_token(),
        :ok &lt;- check_validity(token),
        :ok &lt;- check_signature(token) do
   ...yaaay
else
     _ -&gt; {:error, :invalid_token}
end
</code></pre>
<p>You don’t care about the specific error and return a new error that makes sense for you, this is IMO the greatest power of <code>with</code> expression.</p>
</blockquote>
</aside>
<p>And we’re in complete agreement on this point <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="318528" 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/std-result-a-way-to-standardize-function-returns/61719/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-318528" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318528"
                     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="318529" data-post-id="318529">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ImNotAVirus" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ImNotAVirus/120/14224_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ImNotAVirus
                    <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>That’s what I often do currently</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="318529" 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/std-result-a-way-to-standardize-function-returns/61719/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-318529" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318529"
                     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="318585" data-post-id="318585">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This reminds me somewhat of my library <code>ok_then</code>: <a href="https://hexdocs.pm/ok_then" class="inline-onebox" rel="noopener nofollow ugc">ok_then v1.1.0 — Documentation</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="318585" 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/std-result-a-way-to-standardize-function-returns/61719/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-318585" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318585"
                     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="318599" data-post-id="318599">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Are bang functions supposed to be used with <em>all</em> functions whose error raises an exception? I thought they were only meant as a complement to functions that passed <code>:ok</code>/<code>:error</code> tuples (the implicitly “non-bang” functions).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="318599" 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/std-result-a-way-to-standardize-function-returns/61719/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-318599" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318599"
                     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="318609" data-post-id="318609">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ImNotAVirus" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ImNotAVirus/120/14224_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ImNotAVirus
                    <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>I came across it yesterday <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
<p>I like it! The main difference between our libraries I think (apart from the API) is your handling of <code>nil</code> with <code>:some</code> / <code>:none</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="318609" 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/std-result-a-way-to-standardize-function-returns/61719/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-318609" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="318609"
                     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/61719/load_more?page=4">Load more posts (5 remaining)</a>
</div></template></turbo-stream>