<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="314166" data-post-id="314166">
  <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="D4no0" data-post="41" data-topic="60850">
<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>For example currently you want to type a parameter that is the port, the only way in all languages (as far as I know) is to mark it as integer, when in reality the range is 0 to 65535. This can lead to finding a series of bugs that was possible only at runtime previously, even in statically typed systems.</p>
</blockquote>
</aside>
<p><code>0..65535</code> is a valid spec. But what you described applies as much to <code>float()</code> or <code>String.t()</code>.</p>
<aside class="quote no-group" data-username="D4no0" data-post="41" data-topic="60850">
<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>Generally speaking, if elixir team manages to pull this off, this might as well be the future of typing in the languages to come.</p>
</blockquote>
</aside>
<p>It’s also not just the elixir team working in the space. There’s also various ongoing efforts for adding type systems on erlang.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="314166" 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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/42">Post #41</a>
	                </div>
	            </div>
              <div id="likers-container-314166" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314166"
                     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 #41"></div>
  </section>
</div>
    <div class="postbit" id="314168" data-post-id="314168">
  <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">
								<aside class="quote no-group" data-username="LostKobrakai" data-post="42" data-topic="60850">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lostkobrakai/48/3072_2.png" class="avatar"> LostKobrakai:</div>
<blockquote>
<p><code>0..65535</code> is a valid spec</p>
</blockquote>
</aside>
<p>The question is, does it work as expected? The last time I had to use either ftp or sftp library from OTP, when I introduced a wrong port range I got no warnings and a strange match error.</p>
<aside class="quote no-group" data-username="LostKobrakai" data-post="42" data-topic="60850">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lostkobrakai/48/3072_2.png" class="avatar"> LostKobrakai:</div>
<blockquote>
<p>It’s also not just the elixir team working in the space. There’s also various ongoing efforts for adding type systems on erlang.</p>
</blockquote>
</aside>
<p>Then it must be some core reason why a custom elixir implementation was needed? I don’t remember those other tools trying to make intersection types.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="314168" 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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/43">Post #42</a>
	                </div>
	            </div>
              <div id="likers-container-314168" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314168"
                     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 #42"></div>
  </section>
</div>
    <div class="postbit" id="314169" data-post-id="314169">
  <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="D4no0" data-post="43" data-topic="60850">
<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>Then it must be some core reason why a custom elixir implementation was needed? I don’t remember those other tools trying to make intersection types.</p>
</blockquote>
</aside>
<p>All of them are working a the problem from different angles and therefore different tradeoffs.</p>
<aside class="quote no-group" data-username="D4no0" data-post="43" data-topic="60850">
<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>The question is, does it work as expected? The last time I had to use either ftp or sftp library from OTP, when I introduced a wrong port range I got no warnings and a strange match error.</p>
</blockquote>
</aside>
<p>Probably not, but that’s due to the range being too large and dialyzer will simplify data aggressively.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">________________________________________________________________________________
lib/test.ex:8:call
The function call will not succeed.

A.test(101)

breaks the contract
(0..5) :: 0..5

________________________________________________________________________________
</code></pre>
<p><code>0..100</code> is then already simplified and the violation no longer detected.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="314169" 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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/44">Post #43</a>
	                </div>
	            </div>
              <div id="likers-container-314169" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314169"
                     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 #43"></div>
  </section>
</div>
    <div class="postbit" id="314174" data-post-id="314174">
  <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
                    <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>Typescript (and its dev tooling) are my main example of why static typing is something to look forward to.</p>
<p>Right now, I can only dream of having the beautiful DX afforded by <code>tsserver</code>. But the dream is getting closer…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="314174" 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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/45">Post #44</a>
	                </div>
	            </div>
              <div id="likers-container-314174" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314174"
                     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 #44"></div>
  </section>
</div>
    <div class="postbit" id="314415" data-post-id="314415">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>My primary concern revolves around developer experience (DX), rather than technical aspects. Although I acknowledge this issue might stem from the broader ecosystem, I believe it’s crucial to consider the overall impact.</p>
<p>The core of my apprehension lies in the dependency on tools, particularly those that don’t automatically rectify lint/formatting rules. This reliance often leads to divergent approaches among developers: some strictly adhere to tools like linters, others dismiss them, and then there are those who, like myself, are willing to use these tools provided they resolve issues efficiently.</p>
<p>My stance is neutral as long as the tools effectively handle the underlying problems. However, I foresee that introducing <code>@spec-like</code> annotations could perpetuate existing frustrations in several ways:</p>
<ol>
<li>
<p><strong>Ordering</strong>: The placement of <code>$</code> in relation to other annotations like <code>@doc</code> or <a href="https://github.com/arjan/decorator" rel="noopener nofollow ugc"><code>@decorate</code></a> or any other notation is ambiguous. Should it precede or follow these annotations? The lack of a clear convention can lead to inconsistencies and bikeshedding.</p>
</li>
<li>
<p><strong>Collocation</strong>: When dealing with multiple function patterns, the placement of these annotations becomes a challenge. Should they be grouped at the top or positioned close to the relevant function definition?</p>
</li>
<li>
<p><strong>Naming</strong>: The requirement (or lack thereof) for naming parameters in type signatures needs clarification. Ensuring consistency between the type signature and the actual function parameters can be cumbersome if not handled well.</p>
</li>
<li>
<p><strong>Documentation Colocation</strong>: Unlike TypeScript, where type annotations within documentation are unnecessary, the proposed system raises questions about the documentation of argument types. Ensuring that documentation is both concise and informative is key. Today we rely on discipline alone and packages such as <code>NimbleOptions</code> but this could be improve a ton!</p>
</li>
<li>
<p><strong>Language Server Protocol (LSP) Integration</strong>: It’s crucial to consider how new notations will interact with tools like LSP. Ensuring that these tools take on most of the workload is essential for a smooth developer experience. How refactoring will work, and if the AST will allow the tools to their job affectively.</p>
</li>
</ol> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="314415" 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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/46">Post #45</a>
	                </div>
	            </div>
              <div id="likers-container-314415" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314415"
                     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 #45"></div>
  </section>
</div>
    <div class="postbit" id="314422" data-post-id="314422">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="yordisprieto" data-post="46" data-topic="60850">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/yordisprieto/48/20915_2.png" class="avatar"> yordisprieto:</div>
<blockquote>
<p>The placement of <code>$</code> in relation to other annotations like <code>@doc</code> or <a href="https://github.com/arjan/decorator" rel="noopener nofollow ugc"><code>@decorate</code></a> or any other notation is ambiguous.</p>
</blockquote>
</aside>
<p>I would say rather than ambiguous it is “to be determined”.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="314422" 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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/47">Post #46</a>
	                </div>
	            </div>
              <div id="likers-container-314422" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314422"
                     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 #46"></div>
  </section>
</div>
    <div class="postbit" id="314442" data-post-id="314442">
  <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="yordisprieto" data-post="46" data-topic="60850">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/yordisprieto/48/20915_2.png" class="avatar"> yordisprieto:</div>
<blockquote>
<p>My primary concern revolves around developer experience (DX), rather than technical aspects.</p>
</blockquote>
</aside>
<p>We have been considering these aspects for sure, but it is too early to focus on them in general, given we are still working on the semantics of the type system.</p>
<p>We have discussed this a couple times, so I am not going to rehash all points again, but there is already too much that can happen in function clauses and we don’t want to add more. I bet no one want to see this code:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">def foo({_, _} = bar \\ {:foo, :bar} :: {atom(), atom()}) :: integer()
</code></pre>
<p>Furthermore, a function specification and its implementation are two separate things. In Typescript, you can’t have multiple clauses (afaik). In Elixir, if we tie the specification to the clauses, there is a chance you will accidentally change the specification when moving clauses around and when refactoring code, and by doing so you will get in the way of the type system.</p>
<p>At this moment, I’d say we should put signatures after the docs and grouped immediately before the first clause, since they help both with the documentation and code. And I want them grouped because I want a unified view of how my function behaves and not scattered across multiple lines.</p>
<p>But maybe I will change my mind in 6 months or in 2 years. In order to figure out the best approach, we will need to try and explore things. It hasn’t been a week since the compiler got a rudimentary understanding of types and type signatures certainly won’t happen this year.</p>
<p>Now it is definitely too early. All we are asking for is patience, patience with our work, and patience between yourselves. Let’s not rush this. The worst we can do is to standardize into something sub-optimal because we were too quick to settle.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="314442" data-batch-url="/posts/batch_likers">
                        18
                      </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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/48">Post #47</a>
	                </div>
	            </div>
              <div id="likers-container-314442" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314442"
                     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 #47"></div>
  </section>
</div>
    <div class="postbit" id="314446" data-post-id="314446">
  <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="D4no0" data-post="41" data-topic="60850" data-full="true">
<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>Generally speaking, if elixir team manages to pull this off, this might as well be the future of typing in the languages to come.</p>
<p>For example currently you want to type a parameter that is the port, the only way in all languages (as far as I know) is to mark it as integer, when in reality the range is 0 to 65535. This can lead to finding a series of bugs that was possible only at runtime previously, even in statically typed systems.</p>
</blockquote>
</aside>
<p>As far as I know, handling of intergers (and intervals) has been solved for quite some time. The issue though is that, the more specific the types are, the more you will have to prove to the type system.</p>
<p>Imagine you write this code:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">    port = trunc(:rand.uniform() * 1000 + 3000)
    listen_on_port(port)
</code></pre>
<p>This code will guarantee to give you a port between 3000..4000. But for the type checker to understand this is actually quite complex. So you either buy in into a lot of complexity (and most likely performance) or you handle fewer cases. And, if you don’t handle all cases (which you cannot), in some situations you will be forced to “prove it” by writing something like this:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">    port = trunc(:rand.uniform() * 1000 + 3000)

    if port not in 3000..4000 do
      raise "bad port"
    end

    listen_on_port(port)
</code></pre>
<p>Which is completely redundant but, without it, you get typing violations.</p>
<p>Set-theoretic types can be quite expressive, allowing you to even express types akin to regular expressions, but all of them come with similar drawbacks.</p>
<p>For these reasons, we have not yet decided if we want “fine-grained integers” into the language. We will definitely have that for <em>atoms</em> and we might introduce more granularity later on, but it definitely has trade-offs.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="314446" 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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/49">Post #48</a>
	                </div>
	            </div>
              <div id="likers-container-314446" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314446"
                     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 #48"></div>
  </section>
</div>
    <div class="postbit" id="314451" data-post-id="314451">
  <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>I assume you did the research, and can save me hours of googling - is there a dynamically typed programming language that does this well? i.e. the language is gradually typed?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="314451" 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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/50">Post #49</a>
	                </div>
	            </div>
              <div id="likers-container-314451" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314451"
                     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 #49"></div>
  </section>
</div>
    <div class="postbit" id="314453" data-post-id="314453">
  <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">
								<p>It really depends on what you mean by “this” and “well”, as I am pretty sure we have not found something that does <em>everything</em> well (and according to everyone’s definition of well). There is also a question of how well the lessons from other languages (such as JavaScript, which is OO and highly polymorphic) maps to Elixir (functional and conservatively polymorphic).</p>
<p>I recommend watching my ElixirConf US 2023 keynote, which talks about the principles and how we are tackling some ideas in ways not done before. After all, we need to find a solution that works well for Elixir. <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="314453" 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/jose-valim-elixir-is-officially-a-gradually-typed-language/60850/51">Post #50</a>
	                </div>
	            </div>
              <div id="likers-container-314453" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="314453"
                     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 #50"></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/60850/load_more?page=6">Load more posts (7 remaining)</a>
</div></template></turbo-stream>