<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="381620" data-post-id="381620">
  <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="Eiji" data-post="14" data-topic="73927">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>Support for negations would not look good, but is rather possible - it’s just about list every type except the excluded one.</p>
</blockquote>
</aside>
<p>Only for the simple cases. Consider that there‘s also „anything, but a map with a <code>:name</code> key“ and you‘re thorougly in unrepresentable as typespec territory. You cannot write out all possible maps, which do not have a specific key.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381620" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-381620" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381620"
                     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="381638" data-post-id="381638">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><code>1.20.rc.0</code> perf is good so far, compile times are marginally lower compared to <code>1.19.5</code>. The typechecker highlighted some dead/unreachable code to clean up, and a few missing virtual field declarations on an Ecto schema.</p>
<p>As someone else already mentioned, some tests that were asserting on <code>ArgumentError</code> or <code>FunctionClauseError</code> being thrown started to warn. Maybe there could be situations in which one would want to keep such tests, then it would be good to be able to suppress those compilation warnings somehow.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381638" 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/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-381638" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381638"
                     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="381657" data-post-id="381657">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I actually have this exact use-case in one of my projects. I have some common repo functions for Ecto Schema modules <code>create/1</code>, <code>create!/1</code>, <code>read/1</code>, <code>read!/1</code>, <code>update/2</code>, <code>update!/2</code>, <code>delete/1</code>, and <code>delete!/1</code> for simple single-row non-join CRUD operations. I have these defined in a <code>Models.Base</code> module and I conditionally define the <code>create</code>, <code>update</code>, and <code>delete</code> operations based on a <code>:read_only</code> option to the <code>__using__/1</code> macro. I’ve only just started doing this, so it’s not a big deal if I need to figure out an alternative, but I do like having tests in my test suite that assert my read-only schema modules throw an <code>UndefinedFunctionError</code> when calling any of the write operation functions. Just some extra piece of mind in case I forget the <code>read_only: true</code> when defining/updating a schema module. This is not a situation that would be caught by the type system since a call to <code>create!/1</code> on a should-be-read-only module would only give a typing violation if I correctly remembered to put <code>read_only: true</code>.</p>
<p>Another situation that is more common/realistic is testing program inputs. A static type system can’t protect against invalid data coming into the program at runtime, so if the application takes any kind of user input, having negative test cases to assert bad inputs are handled gracefully is useful. This is a common issue in TypeScript projects because devs get it into their heads that the compiler will catch all the type errors, and then it crashes at runtime due to bad data input by the user. Even in Elixir where we “let it crash”, that only works in embedded applications that don’t have a user looking at the loading bar when the LiveView reloads, so negative tests are good. <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>All that being said, I am 100% in favor of better type inference if it doesn’t come with huge performance costs. The more the compiler can do for me without extra code/effort on my part the better. Thanks Elixir Team!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381657" 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/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-381657" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381657"
                     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="381673" data-post-id="381673">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="michallepicki" data-post="16" data-topic="73927">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/m/5f9b8f/48.png" class="avatar"> michallepicki:</div>
<blockquote>
<p>Maybe there could be situations in which one would want to keep such tests, then it would be good to be able to suppress those compilation warnings somehow.</p>
</blockquote>
</aside>
<p>Indeed. For the record, in the Elixir repo, these rests are either being removed or tested by using the <code>Process.get(:unused, wrong_arg)</code> hack <a href="https://github.com/search?q=repo%3Aelixir-lang%2Felixir%20Process.get" rel="noopener nofollow ugc">(examples)</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="381673" 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/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-381673" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381673"
                     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="381680" data-post-id="381680">
  <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="GrammAcc" data-post="17" data-topic="73927">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/grammacc/48/40380_2.png" class="avatar"> GrammAcc:</div>
<blockquote>
<p>Another situation that is more common/realistic is testing program inputs.</p>
</blockquote>
</aside>
<p>To add to <a class="mention" href="/u/sabiwara" rel="nofollow">@sabiwara</a>’s workaround, the type system won’t warn if the program input is within its valid type. For example, if you have a function that expects integers only from 2..26 (like Integer.parse/2), passing an invalid input such as 0 won’t trigger any warning. However, if you give a boolean, then a warning is emitted.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381680" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-381680" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381680"
                     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="381692" data-post-id="381692">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>No problem. We can always make a map with keys 1..26 so we can catch the issue as the keys are checked.</p>
<p>Jokes aside: any chance this could be done with this type system? Seems not impossible to me (but I have no clue)</p>
<p>(ps. I know it wont safe us from user input, but maybe it can advice to add guards to the outer layer for fail-fast)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381692" 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/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-381692" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381692"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Re: negative tests. I’m currently using <code>apply/3</code> for these <code>UndefinedFunctionError</code> tests since it’s a bit more intentional than a generic <code>get</code> on the module, but I don’t like the idea of using a workaround like that for a defined function where I’m passing in a boolean or string instead of an integer.</p>
<p>It’s actually a very common error if the FE is standalone JS and not server rendered for someone to accidentally call <code>.toString()</code> on a number before serializing, and then the JSON field gets parsed as <code>"1”</code> instead of <code>1</code> on the BE. For most applications, this isn’t a big deal, but I’ve ran into this when writing a very strict input validation layer before, so I think having a way to selectively disable type inference for test modules is a good feature to have. I don’t think we should have <code>@type-ignore</code> pragmas or anything that could be used anywhere we want cause that would encourage type hell, and Elixir’s <code>dynamic()</code> is much better than other langague’s <code>any</code>, so I don’t think we will need it in application code.</p>
<p>Some code is just intentionally written to violate application constraints though. Namely negative test cases. <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>Hopefully, fuzz testing and simulation testing gets easier to implement at small scales, so this problem would eventually go away, but for now, a workaround in the language or library layers instead of the user’s test code would be ideal.</p>
<p>Maybe this could be solved with a <a href="https://hexdocs.pm/mix/main/Mix.Tasks.Compile.html#module-compilers" rel="noopener nofollow ugc">custom mix compiler</a> for ExUnit modules that disables type inference (but not type checking in general)?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381694" 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/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-381694" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381694"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Would be great if the language tooling could somehow encourage this practice. I always advocate for doing all input parsing as close to the application boundary as possible at work and in community projects. It saves so much time later on to know that any data structure that makes it into the service layer is valid. <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>Not sure how that would be detected though. Maybe more of a linter thing than compiler warning since it’s more of a code style/pattern issue than an actual technical problem with the code?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381695" 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/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-381695" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381695"
                     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="381698" data-post-id="381698">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I agree <code>Process.get</code> “feels” like a hack, but maybe a <code>dynamic/1</code> function helper that hides a type of a value would be fine?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381698" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-381698" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381698"
                     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="381705" data-post-id="381705">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>It would work. Personally, I dislike constructs that blur the lines between the type annotations and runtime code/checks. I would prefer a solution that doesn’t require me to change any of my application or test code since this is related to inference in the first place, but that’s just my preference. I dunno what the popular opinion on that is. I just know I really like how Python clearly separates static types from runtime behavior and TypeScript gets really messy when it’s unclear which context some code is in. For example, accessing object attributes on an Enum in typescript is pretty messy cause it changes the context of the code from the compile-time type to the runtime object implicitly without clear indication in the syntax. <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="381705" 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/elixir-v1-20-0-rc-0-and-rc-1-released-type-inference-of-all-constructs/73927/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-381705" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381705"
                     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>
</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/73927/load_more?page=3">Load more posts (20 remaining)</a>
</div></template></turbo-stream>