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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="jmnsf" data-post="21" data-topic="19209">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jmnsf/48/16984_2.png" class="avatar"> jmnsf:</div>
<blockquote>
<p>I want to be able to say, “this function takes an argument that implements protocol (interface) X”. I don’t care about its type per se, but what it does.</p>
</blockquote>
</aside>
<p>That’s not possible with pattern matching and, as far as I know, with Dialyzer.</p>
<p>The thing is, you won’t have static typing guarantees in a dynamic language like Elixir (save some things that can be detected by Dialyzer), and at runtime, a <code>Protocol.UndefinedError</code> saying that “protocol X not implemented for y of type Y” will be more descriptive than a failed pattern match anyway.</p>
<p>If your concern is documentation, you can still do something akin to what the <code>Enum</code> module does: it defines its functions as taking an <code>Enumerable.t()</code> type, which is actually defined as <code>term</code>, but it makes it clear in the docs that anything implementing <code>Enumerable</code> is a valid argument.</p>
<p>One of the differences between protocols and duck-typing in OOP is that protocols allow you to define implementations in an open way without having to “own” the protocol or the data type. A protocol can be implemented by anyone, not only by the project defining the data type or by the project defining the protocol. It’s an elegant solution to the open-closed principle and the expression problem.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="170045" 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/is-it-possible-to-declare-a-generic-type/19209/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-170045" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170045"
                     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="170047" data-post-id="170047">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="benwilson512" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/120/1457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  benwilson512
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Craft GraphQL APIs in Elixir with Absinthe</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Traditionally with Dialyzer if you want to say your function takes a <code>Fooable</code> protocol you can do:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">@spec fun(Fooable.t()) :: whatever
</code></pre>
<p>However note that <code>Fooable.t</code> is basically just <code>term</code>. It’s great for docs, may not make any real difference in terms of concrete type checking.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="170047" 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/is-it-possible-to-declare-a-generic-type/19209/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-170047" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170047"
                     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="170054" data-post-id="170054">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>a Protocol.UndefinedError saying that “protocol X not implemented for y of type Y” will be more descriptive than a failed pattern match anyway</p>
</blockquote>
<p>At runtime, sure, but not while reading the code or compiling.</p>
<blockquote>
<p>it defines its functions as taking an <code>Enumerable.t()</code> type</p>
</blockquote>
<p>This helps quite a bit, thanks for the suggestion. I think I’ll give this a try, and try to get dyalizer working on my project. Right now it just spews out a bunch of garbage from other libraries’ code.</p>
<blockquote>
<p>One of the differences between protocols and duck-typing in OOP is that protocols allow you to define implementations in an open way without having to “own” the protocol or the data type. A protocol can be implemented by anyone, not only by the project defining the data type or by the project defining the protocol. It’s an elegant solution to the open-closed principle and the expression problem.</p>
</blockquote>
<p>I don’t follow your reasoning on this one. When duck-typing in ruby, for example, you can definitely implement a method anywhere for another class anywhere in your code, or any library’s code, even more dynamically that elixir allows.</p>
<hr>
<p>I guess it just feels like there should be more here. Typespecs are code, for example, and error out on the compiler if they’re not well formed. So the type-system is tightly coupled with the language. If the compiler enforces correct typespecs, it doesn’t feel like a big leap to expect it to enforce the typespecs themselves, when possible.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="170054" 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/is-it-possible-to-declare-a-generic-type/19209/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-170054" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170054"
                     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="170056" data-post-id="170056">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="benwilson512" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/120/1457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  benwilson512
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Craft GraphQL APIs in Elixir with Absinthe</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="jmnsf" data-post="24" data-topic="19209">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jmnsf/48/16984_2.png" class="avatar"> jmnsf:</div>
<blockquote>
<p>If the compiler enforces correct typespecs, it doesn’t feel like a big leap to expect it to enforce the typespecs themselves, when possible.</p>
</blockquote>
</aside>
<p>There is a massive leap between enforcing that a proposition is <em>well formed</em> and enforcing that a set of propositions are true through the whole code base. People have tried, dialyzer is about the best you can do right now given that nobody has a workable scheme for typing messages. You’re welcome to prove us all wrong though by implementing types in Elixir <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" 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="170056" 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/is-it-possible-to-declare-a-generic-type/19209/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-170056" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170056"
                     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="170060" data-post-id="170060">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="jmnsf" data-post="24" data-topic="19209">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jmnsf/48/16984_2.png" class="avatar"> jmnsf:</div>
<blockquote>
<p>I don’t follow your reasoning on this one. When duck-typing in ruby, for example, you can definitely implement a method anywhere for another class anywhere in your code, or any library’s code, even more dynamically that elixir allows.</p>
</blockquote>
</aside>
<p>Yes, you can, but that requires reopening the class and re-defining or adding methods with all the issues it brings. The classes are open for extension, but also open for implementation changes, which means you cannot rely on a class having a particular interface unless you are aware of all the places that reopen it.</p>
<p>Don’t get me wrong, I love Ruby, but I also think that Elixir protocols are a superior solution to the expression problem than Ruby’s open classes.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="170060" 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/is-it-possible-to-declare-a-generic-type/19209/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-170060" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170060"
                     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="170061" data-post-id="170061">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="benwilson512" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/120/1457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  benwilson512
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Craft GraphQL APIs in Elixir with Absinthe</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="lucaong" data-post="26" data-topic="19209">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lucaong/48/21794_2.png" class="avatar"> lucaong:</div>
<blockquote>
<p>Don’t get me wrong, I love Ruby, but I also think that Elixir protocols are a superior solution to the expression problem than Ruby’s open classes.</p>
</blockquote>
</aside>
<p>Right. This is readily apparent if two protocols both require a function called <code>call/2</code> for example. If you implement this with monkey patching or even inheritance you’re gonna run into issues because the class can only have a single <code>#call</code> method. However you can easily create two different protocol implementations for two different protocols that both have a call function because you always pass the data structure to the protocol, so there’s no ambiguity.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="170061" 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/is-it-possible-to-declare-a-generic-type/19209/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-170061" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170061"
                     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="170085" data-post-id="170085">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I do this sort of thing several places in code that introspect the module information. But it’s a pain in the ass and I only do it for absolutely critical things (for example, I got tired of mistyping config and rolling a release, so I have strong compile time checks on my config that block the release process).</p>
<p>There’s another place where I abuse using to check to make sure a module really really implements certain fields in it’s structs.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="170085" 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/is-it-possible-to-declare-a-generic-type/19209/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-170085" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170085"
                     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="170164" data-post-id="170164">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>There is a massive leap between enforcing that a proposition is <em>well formed</em> and enforcing that a set of propositions are true through the whole code base.</p>
</blockquote>
<p>Sure, but I never said there wasn’t a big leap on implementation difficulty. I said there wasn’t a big leap in <em>expecting</em> the implementation to be there.</p>
<p>There’s a big leap between sticking a doorknob on a piece of wood and making it open an actual door. Still, one reasonably expects a doorknob to open whatever it’s attached to.</p>
<blockquote>
<p>You’re welcome to prove us all wrong though by implementing types in Elixir</p>
</blockquote>
<p>Well alright, lets just not implement any improvements and consider any feedback unless they’re accompanied with a full PR by someone external to the project <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" 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="170164" 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/is-it-possible-to-declare-a-generic-type/19209/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-170164" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170164"
                     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="170167" data-post-id="170167">
  <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 quote-modified" data-username="jmnsf" data-post="29" data-topic="19209">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jmnsf/48/16984_2.png" class="avatar"> jmnsf:</div>
<blockquote>
<blockquote>
<p>You’re welcome to prove us all wrong though by implementing types in Elixir</p>
</blockquote>
<p>Well alright, lets just not implement any improvements and consider any feedback unless they’re accompanied with a full PR by someone external to the project</p>
</blockquote>
</aside>
<p>This should hopefully not be the message and I’d like to give some context. Many people question the elixir community whether or why there’s no static typing capabilities or at least something more rigorous than dialyzer, while being unaware that many people did work and are working in that space. But to my understanding there has not yet been found a good way to type the message passing capabilities for processes on the beam in a manner of favorable tradeoffs. There are also a few other less critical things to consider like e.g. hot code reloading.</p>
<p>Therefore it’s less a matter of not accepting or implementing feedback, but rather one of the community being aware of the requests and their benefits – but not having a solution – while the question of why this is not in elixir pops up regularly. There are many people who’d like to see more static typing in elixir and piece by piece the core team does seem to add the things to the compiler that they can.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="170167" 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/is-it-possible-to-declare-a-generic-type/19209/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-170167" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170167"
                     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="170183" data-post-id="170183">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for the reply. This question was originally posted over a year ago, but there is no mention that something like this is being worked on or is even something the language “wants”. It would be helpful to have that linked (I found something that’s closely related but it’s inactive <a href="https://github.com/elixir-lang/elixir/issues/7541" class="inline-onebox" rel="noopener nofollow ugc">Parametrized remote types for protocols · Issue #7541 · elixir-lang/elixir · GitHub</a>; I should have searched earlier) or just referenced, as you just did.</p>
<p>My intention isn’t to criticize the lack of a certain feature, but mostly to express surprise that it doesn’t exist. So much so that I wondered if I’d missed it (as, apparently, did the OP).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="170183" 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/is-it-possible-to-declare-a-generic-type/19209/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-170183" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="170183"
                     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/19209/load_more?page=4">Load more posts (4 remaining)</a>
</div></template></turbo-stream>