<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="111556" data-post-id="111556">
  <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
                    <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>Creator of Elixir</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Given it is <code>defmacrop</code> and not <code>defpmacro</code>, I think it should be <code>defmodulep</code>, even if for consistency. Also, having the <code>p</code> at the end makes it more visible than in the middle of the word.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111556" data-batch-url="/posts/batch_likers">
                        8
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/proposal-private-modules-general-discussion/19374/102">Post #101</a>
	                </div>
	            </div>
              <div id="likers-container-111556" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111556"
                     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 #101"></div>
  </section>
</div>
    <div class="postbit" id="111564" data-post-id="111564">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Fair enough, I don’t think I’ve ever used <code>defmacrop</code> and didn’t know it existed. It should have been the other way around for easy remembering I think, i.e. code that reads like English comes in a bit more natural than arbitrary reversed. Smalltalk did that a lot, Objective-C as well and I always liked it. but anyway, thanks for clarification and I can very much live with that.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111564" 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/proposal-private-modules-general-discussion/19374/103">Post #102</a>
	                </div>
	            </div>
              <div id="likers-container-111564" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111564"
                     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 #102"></div>
  </section>
</div>
    <div class="postbit" id="111566" data-post-id="111566">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Why not the other way around?</p>
<p>declare the module private with an attribute (<code>@private</code> should be enough) and then to use it in your modules add a <code>requirep</code> keyword.<br>
If you don’t <code>requirep</code> compilation fails.</p>
<p>The intent is clear and there cannot be confusion about using a private implementation that could break over time.</p>
<p>Eventually an optional <code>@visible_to</code> attribute could be used to restrict the “<em>requirability</em>” of the module.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111566" 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/proposal-private-modules-general-discussion/19374/104">Post #103</a>
	                </div>
	            </div>
              <div id="likers-container-111566" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111566"
                     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 #103"></div>
  </section>
</div>
    <div class="postbit" id="111576" data-post-id="111576">
  <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
                    <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>Creator of Elixir</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi everyone,</p>
<p>Here are two concerns about proposals B/C/D. Since the <code>require+alias</code> are necessary, it may make the code too verbose. For example, imagine you have a Phoenix context with this:</p>
<pre><code>alias MyApp.Blog.{Post, Like, Comment}
</code></pre>
<p>If we make those modules private, we need to break them individually as:</p>
<pre><code>require MyApp.Blog.Post, as: Post
require MyApp.Blog.Like, as: Like
require MyApp.Blog.Comment, as: Comment
</code></pre>
<p>Which is considerably more verbose.</p>
<p>The other concern is that invoking <code>require</code> (or <code>use</code> or <code>import</code>) on a module defined in the same project, the current module will stop compiling until the required module becomes available and then it resumes compilation. This implies two things:</p>
<ol>
<li>
<p>It is not possible to have circular dependencies between private modules. Although circular dependencies are arguably a consequence of poor design, it still is a difference in behaviour;</p>
</li>
<li>
<p>And there is a chance that if you require too many modules, compilation may slow down, as we need to wait for the require modules to finish compilation;</p>
</li>
</ol>
<p>Those issues can all happen today but they are not very common because we don’t rely on require and similar between modules in the same project that often. However, adding private modules may be enough to make those issues more common and apparent.</p>
<p>This is not enough to block proposals B/C/D but it adds extra concerns to the mentioned proposals.</p>
<p>Note that one possible solution to this problem is to introduce <code>requirep</code> or <code>aliasp</code>. But we are concerned that adding yet another modified (besides alias, import, require, and use) will add more confusion and complexity than help.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111576" 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/proposal-private-modules-general-discussion/19374/105">Post #104</a>
	                </div>
	            </div>
              <div id="likers-container-111576" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111576"
                     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 #104"></div>
  </section>
</div>
    <div class="postbit" id="111585" data-post-id="111585">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I feel A, C, D are a little inconsistent to the current “private” behaviours, ie: <code>defmacrop</code>, <code>defp</code>. The current behaviours of <code>defmacrop</code> and <code>defp</code> are such that “they are only accessible in the module that they are defined in”. But the message that A, C, D send is: “it is discouraged to use this, but you can still use it if you want”.</p>
<p>B is the most consistent, perhaps it is the least useful? But I’d argue we’d have the same benefits if we made <code>defp</code> also “discouraged but allowed”.</p>
<p>Would it be worthwhile to explore a path where private functions are accessible with a special syntax? If that could be done, one can write a private module by making all its functions private…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111585" 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/proposal-private-modules-general-discussion/19374/106">Post #105</a>
	                </div>
	            </div>
              <div id="likers-container-111585" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111585"
                     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 #105"></div>
  </section>
</div>
    <div class="postbit" id="111589" data-post-id="111589">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="100" data-topic="19374">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar"> josevalim:</div>
<blockquote>
<p>It is not a new syntax. It is just a new macro/function. For example, if we add a new function to Enum, you can’t invoke it on earlier Elixir versions either. Should we stop adding functions to Enum and other Elixir modules? <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>
</blockquote>
</aside>
<p>You are correct. Technically I think it’s it’s semantics, not syntax, but does getting the word wrong really invalidate the point that you’re adding more overhead to a very central part of the language - defining a new module - which will also not be backwards compatible, and that such a choice has negatives inherent to it that should come into judgement on whether it’s a good idea?</p>
<p>I’m not suggesting it’s not worth it to do so, only that it should be a consideration when comparing solutions.</p>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="100" data-topic="19374">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar"> josevalim:</div>
<blockquote>
<p>We are not allowing access because of external users, but for the authors of the private module themselves. It is a small distinction but it is an important one. Leaving the key under the carpet does not give permission for anyone else to get that key and enter your house - although you know it is a possibility when you do.</p>
</blockquote>
</aside>
<p>I now see the distinction you’re trying to make (though I’m not sure it’s obvious from your initial talk about being able to access to allow debugging of live systems), but is it a distinction captured in the behavior of the code? Will those other than module authors be prevented from accessing? If not, do you think it’s a distinction that will survive in the wild?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111589" 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/proposal-private-modules-general-discussion/19374/107">Post #106</a>
	                </div>
	            </div>
              <div id="likers-container-111589" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111589"
                     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 #106"></div>
  </section>
</div>
    <div class="postbit" id="111590" data-post-id="111590">
  <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">
								<aside class="quote no-group" data-username="mischov" data-post="99" data-topic="19374">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mischov/48/2489_2.png" class="avatar"> mischov:</div>
<blockquote>
<p>In my experience, private methods and modules cause more problems than they solve. They increase logic duplication, complicate debugging and if developers are trying to access them…the developers usually have a good reason for doing so.</p>
</blockquote>
</aside>
<p>Disagreed with <a class="mention" href="/u/mischov" rel="nofollow">@mischov</a> and <a class="mention" href="/u/brightball" rel="nofollow">@brightball</a> here.</p>
<ul>
<li>
<p>In the case of inexperienced programmers: they simply look for the quickest way to get a job done without regarding much of anything else. So they definitely do not have a good reason for invoking private modules.</p>
</li>
<li>
<p>In the case of experienced programmers: they will have zero problems being explicit about their intention of using a private module – which is the whole point of this proposal.</p>
</li>
</ul>
<p>In both cases, if the library doesn’t leave you with any choice but to use a private module then (a) you should try and communicate with the author to fix that or (b) will make a conscious decision to use a frozen version of the library since you rely on its private API.</p>
<p>I don’t see how implementing this proposal will change anything at all in legacy code. Moving forward, it allows for explicitness which I think we all around here agree is a good thing.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111590" 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/proposal-private-modules-general-discussion/19374/108">Post #107</a>
	                </div>
	            </div>
              <div id="likers-container-111590" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111590"
                     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 #107"></div>
  </section>
</div>
    <div class="postbit" id="111599" data-post-id="111599">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I prefer C.</p>
<p>D is too weak. For example, when a function is private, Elixir won’t allow me to just use it, and warn me. I think C is more in line with this. And having the <code>:"Elixirp.(.*)"</code> fallback seems to be as an OK tradeoff because of real world needs. The <code>p</code> in <code>Elixirp</code> makes it super easy to navigate through all the hacks.</p>
<p>I’d prefer having A’s <code>@visible_to</code> attribute, instead of passing it in the head. It seems it would be too common to have multiline <code>defmodulep</code> heads, because of reasonably fine grained visibility lists. And since when we’re defining module stuff, this usually goes through module attributes, <code>@visible_to</code> feels more idiomatic to me.</p>
<p>If someone doesn’t specify <code>@visible_to</code>, I guess we could go with the base namespace as a convention? <code>This.Example.PrivateModule</code> =&gt; default to <code>[This]</code>. I think this is nice when the user doesn’t care about using it inside the package, just doesn’t want to expose these modules to external code (in other namespaces).</p>
<p>Would be nice if <code>mix docs</code> would get an option to put in or not private modules (maybe default to <code>false</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="111599" 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/proposal-private-modules-general-discussion/19374/109">Post #108</a>
	                </div>
	            </div>
              <div id="likers-container-111599" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111599"
                     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 #108"></div>
  </section>
</div>
    <div class="postbit" id="111600" data-post-id="111600">
  <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
                    <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>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="mischov" data-post="107" data-topic="19374">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mischov/48/2489_2.png" class="avatar"> mischov:</div>
<blockquote>
<p>but is it a distinction captured in the behavior of the code?</p>
</blockquote>
</aside>
<p>It is because you should never have <code>:"Elixirp.Foo.Bar"</code> in your compiled code. It is very easy to spot those transgressions, it looks ugly, and it can be automated by tools like Credo. The concession exists for authors debugging and exploring the code, which means they are accessing it only in temporary sessions, such as inside IEx, and never as part of their compiled 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="111600" 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/proposal-private-modules-general-discussion/19374/110">Post #109</a>
	                </div>
	            </div>
              <div id="likers-container-111600" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111600"
                     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 #109"></div>
  </section>
</div>
    <div class="postbit" id="111601" data-post-id="111601">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I vote for <strong>C</strong>.</p>
<p>Because it doesn’t break the decisions made by the platform (repl, live debug, etc), and still make very clear to the user that it is a private API, and if wants to use it anyway it by its own risk by doing workarounds.</p>
<p>To the notation, I prefer the declaration to be <em>explicitly</em> on the head of <code>defmodulep</code> because it is required to be visible to something otherwise there is no point in declaring. But IMHO should be noted that <code>defmodule</code> is a macro that accepts arguments, and not a keyword in notation of other languages, so newcomers doesn’t get confused.</p>
<p>I’m ok with using <code>require</code> instead of <code>alias</code>, because you require that module to be in the same “scope”, and <code>alias</code> has the impression that the module is already in the same scope.</p>
<p>Thanks for that proposal <img src="https://forum.elixirforum.com/images/emoji/apple/heart.png?v=15" title=":heart:" class="emoji" alt=":heart:" 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="111601" 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/proposal-private-modules-general-discussion/19374/111">Post #110</a>
	                </div>
	            </div>
              <div id="likers-container-111601" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111601"
                     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 #110"></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/19374/load_more?page=12">Load more posts (47 remaining)</a>
</div></template></turbo-stream>