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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                    <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>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>There is not. This kind of functionality can only be provided using macros. This means one of three possibilities:</p>
<ol>
<li><code>use</code>, which TypeCheck uses now and is arguably the most straightforward/well-known.</li>
<li>Redefining <code>defmodule</code>. However, to be able to use the overridden <code>defmodule</code>, someone requires a <code>require YourModule; import Kernel, except: [defmodule: 2]</code> somewhere earlier in the file as well. The only way to hide this is again by using <code>use</code>.</li>
<li>A separate compilation pass/tracer. While this might be possible, it would mean a whole lot of extra work to get it working reliably.</li>
</ol>
<p>So for now, <code>use TypeCheck</code> it is.<br>
The added benefit of having this line visibly there in your modules, is of course that it is less magical/more explicit. My hope is that people will be able to grasp that there might be a connection between <code>@type!</code> and <code>@spec!</code> with <code>TypeCheck</code> when they are reading a module’s source code, even if they’ve never heard of it before.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="227555" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/74">Post #73</a>
	                </div>
	            </div>
              <div id="likers-container-227555" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="227555"
                     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 #73"></div>
  </section>
</div>
    <div class="postbit" id="227557" data-post-id="227557">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/sb8244" rel="nofollow">@sb8244</a> Probably doesn’t solve your problem, but my use of this in the wild is to bring it into modules that are already shared with the various parts of my app. For example, contexts will already <code>use</code> a module like this:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MyApp.Context do
  defmacro __using__(_) do
    quote do
      use TypeCheck
      # ... other context concepts that should always be present
    end
  end
end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="227557" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/75">Post #74</a>
	                </div>
	            </div>
              <div id="likers-container-227557" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="227557"
                     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 #74"></div>
  </section>
</div>
    <div class="postbit" id="227673" data-post-id="227673">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                    <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>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The technique <a class="mention" href="/u/baldwindavid" rel="nofollow">@baldwindavid</a> describes is a nice one. You might already have used it (consciously or subconsciously) elsewhere, such as your app’s Ecto Repo module, or your app’s Phoenix Endpoint module.</p>
<p>TypeCheck requires its options to be specified at compile-time, and some of the options might be different per module. As such, passing the options as parameters to <code>use</code> is a better approach than using e.g. <code>Application.compile_env</code>.<br>
So in the case you need some more complex options which might be shared across multiple modules of your application, I would suggest doing something like:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MyApp.TypeCheck do
  defmacro __using__(opts) do
    quote do
      use TypeCheck, (unquote(opts) ++ [
      # Some example options: 
      overrides: MyApp.TypeCheck.app_specific_overrides(), 
      enable_runtime_checks: if Mix.env() != :prod, 
       # etc.
      ])
    end
  end

  def app_specific_overrides() do
    [
      {{Foo, :bar, 1}, {Alternative, :baz, 1}},
      # etc.
    ]
  end
end
</code></pre>
<p>Then in your other modules, a plain <code>use MyApp.TypeCheck</code> is enough.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="227673" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/76">Post #75</a>
	                </div>
	            </div>
              <div id="likers-container-227673" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="227673"
                     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 #75"></div>
  </section>
</div>
    <div class="postbit" id="228298" data-post-id="228298">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                    <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>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-228298-version-090httpshexpmpackagestype_check-has-been-released-blush-1" class="anchor" href="#p-228298-version-090httpshexpmpackagestype_check-has-been-released-blush-1" aria-label="Heading link" rel="nofollow"></a><a href="https://hex.pm/packages/type_check" rel="nofollow">Version 0.9.0</a> has been released! <img src="https://forum.elixirforum.com/images/emoji/apple/blush.png?v=15" title=":blush:" class="emoji" alt=":blush:" loading="lazy" width="20" height="20"></h1>
<h2><a name="p-228298-additions-improvements-2" class="anchor" href="#p-228298-additions-improvements-2" aria-label="Heading link" rel="nofollow"></a>Additions &amp; Improvements</h2>
<p>Support for bitstring literal types.</p>
<p>The types <code>bitstring()</code>, <code>binary()</code> and <code>String.t()</code> were already supported.<br>
However, support has now been added for the types:</p>
<ul>
<li><code>&lt;&lt;&gt;&gt;</code> (matching an empty bitstring),</li>
<li><code>&lt;&lt;_ :: size&gt;&gt;</code> (matching a bitstring of exactly <code>size</code> bits long),</li>
<li><code>&lt;&lt;_ :: _ * unit&gt;&gt;</code> (matching any bitstring of <code>x * unit</code> where <code>x :: pos_integer()</code>),</li>
<li><code>&lt;&lt;_ :: size, _ :: _ * unit&gt;&gt;</code> (matching any bitstring of <code>size + x * unit</code> where <code>x :: pos_integer()</code>).</li>
</ul>
<p>Property-testing generators have also been constructed for them, so you can immediatly start using them with <a href="https://hexdocs.pm/type_check/TypeCheck.ExUnit.html" rel="noopener nofollow ugc">spectests</a>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228298" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/77">Post #76</a>
	                </div>
	            </div>
              <div id="likers-container-228298" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228298"
                     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 #76"></div>
  </section>
</div>
    <div class="postbit" id="228957" data-post-id="228957">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                    <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>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-228957-version-0100httpshexpmpackagestype_check-has-been-released-1" class="anchor" href="#p-228957-version-0100httpshexpmpackagestype_check-has-been-released-1" aria-label="Heading link" rel="nofollow"></a><a href="https://hex.pm/packages/type_check" rel="nofollow">Version 0.10.0</a> has been released! Ⲗ</h1>
<h2><a name="p-228957-additions-improvements-2" class="anchor" href="#p-228957-additions-improvements-2" aria-label="Heading link" rel="nofollow"></a>Additions &amp; Improvements</h2>
<p>Support for function-types (for typechecks as well as property-testing generators):</p>
<ul>
<li><code>(-&gt; result_type)</code></li>
<li><code>(...-&gt; result_type)</code></li>
<li><code>(param_type, param2_type -&gt; result_type)</code></li>
</ul>
<h3><a name="p-228957-type-checking-function-types-3" class="anchor" href="#p-228957-type-checking-function-types-3" aria-label="Heading link" rel="nofollow"></a>Type-checking function-types</h3>
<p>Type-checking a function value against a function-type works a bit differently from most other types.<br>
The reason for this is that we can only ascertain whether the function-value works correctly when the function-value is called.</p>
<p>Specifically:</p>
<ul>
<li>When a call to <code>TypeCheck.conforms/3</code> (and variants) or a function wrapped with a <code>@spec!</code> is called, we can immediately check whether a particular parameter:
<ul>
<li>is a function</li>
<li>accepts the expected arity</li>
</ul>
</li>
<li>Then, the parameter-which-is-a-function is wrapped in a ‘wrapper function’ which, when called:
<ul>
<li>typechecks whether the passed parameters are of the expected types (<em>This checks whether <em>your</em> function uses the parameter-function correctly</em>.)</li>
<li>calls the original function with the parameters.</li>
<li>typechecks whether the result is of the expected type. (<em>This checks whether the <em>parameter-function</em> works correctly</em>.)</li>
<li>returns the result.</li>
</ul>
</li>
</ul>
<p>In other words, the ‘wrapper function’ which is added for a type <code>(param_type, param_type2 -&gt; result_type)</code> works similarly<br>
to a named function with the spec <code>@spec! myfunction(param_type, param_type2) :: result_type</code>.</p>
<p>As an example:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">      iex&gt; # The following passes the first check...
      iex&gt; fun = TypeCheck.conforms!(&amp;div/2, (integer(), integer() -&gt; boolean()))
      iex&gt; # ... but once the function returns, the wrapper will raise
      iex&gt; fun.(20, 5)
      ** (TypeCheck.TypeError) The call to `#Function&lt;...&gt;/2` failed,
          because the returned result does not adhere to the spec `boolean()`.
          Rather, its value is: `4`.
          Details:
            The result of calling `#Function&lt;...&gt;.(20, 5)`
            does not adhere to spec `(integer(), integer() -&gt; boolean())`. Reason:
              Returned result:
                `4` is not a boolean.

</code></pre>
<p>This was quite the adventure to implement. I am happy that it turned out to be possible, and it is working great!</p>
<h3><a name="p-228957-data-generation-for-function-types-4" class="anchor" href="#p-228957-data-generation-for-function-types-4" aria-label="Heading link" rel="nofollow"></a>Data generation for function types</h3>
<p>For property-testing generators, the data passed to a generated function is converted into a seed (using <code>[param1, param2, param3] |&gt; :erlang.term_to_binary |&gt; Murmur.hash_x86_32</code>) and this seed is then used as seed for the data returned from the function.<br>
This means that for any particular test run, any generated function will be <em>pure</em> (i.e. when given the same input multiple times, the same output will be returned).</p>
<h2><a name="p-228957-fixes-5" class="anchor" href="#p-228957-fixes-5" aria-label="Heading link" rel="nofollow"></a>Fixes</h2>
<ul>
<li>Wrapping private functions no longer make the function public. (c.f. <span class="hashtag-raw">#64</span>)</li>
<li>Wrapping macros now works correctly. (also related to <span class="hashtag-raw">#64</span>)</li>
<li>Using <code>__MODULE__</code> inside a struct inside a type now expands correctly. (c.f. <span class="hashtag-raw">#66</span>)</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228957" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/78">Post #77</a>
	                </div>
	            </div>
              <div id="likers-container-228957" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228957"
                     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 #77"></div>
  </section>
</div>
    <div class="postbit" id="228991" data-post-id="228991">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                    <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>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-228991-version-0101-has-been-released-1" class="anchor" href="#p-228991-version-0101-has-been-released-1" aria-label="Heading link" rel="nofollow"></a><a rel="nofollow">Version 0.10.1</a> has been released!</h1>
<h2><a name="p-228991-fixes-2" class="anchor" href="#p-228991-fixes-2" aria-label="Heading link" rel="nofollow"></a>Fixes</h2>
<ul>
<li>Swap <code>Murmur</code> out for <code>:erlang.phash2</code> in the generation of function-values.</li>
</ul>
<p>In <code>0.10.0</code>, the capability to generate arbitrary values from function-types was introduced (for use in e.g. spectesting and property-based testing).<br>
However, this required adding <code>:murmur</code> as extra (optional) dependency.<br>
Since it turns out that the capability of generating a (non-cryptographic) integer hash value from an arbitrary term is built in in Erlang, TypeCheck now no longer needs the dependency.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228991" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/79">Post #78</a>
	                </div>
	            </div>
              <div id="likers-container-228991" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228991"
                     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 #78"></div>
  </section>
</div>
    <div class="postbit" id="231293" data-post-id="231293">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Qqwy" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Qqwy/120/1349_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Qqwy
                    <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>TypeCheck Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>For who wants some more in-depth knowledge on how the library works and could be used, be sure to check out <a href="https://forum.elixirforum.com/t/podcast-thinking-elixir-072-typecheck-with-wiebe-marten-wijnja/43725" rel="nofollow">Episode 72 of the Thinking Elixir podcast</a>, in which Mark Ericksen, David Bernheisel and Cade Ward interviewed me about the library <img src="https://forum.elixirforum.com/images/emoji/apple/blush.png?v=15" title=":blush:" class="emoji" alt=":blush:" 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="231293" data-batch-url="/posts/batch_likers">
                        14
                      </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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/80">Post #79</a>
	                </div>
	            </div>
              <div id="likers-container-231293" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="231293"
                     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 #79"></div>
  </section>
</div>
    <div class="postbit" id="231325" data-post-id="231325">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I listened to it. It was really good interview Martin.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="231325" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/81">Post #80</a>
	                </div>
	            </div>
              <div id="likers-container-231325" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="231325"
                     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 #80"></div>
  </section>
</div>
    <div class="postbit" id="231634" data-post-id="231634">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>When I tried adding this to an existing Phoenix project that I had been using Dialyzer on before, I got a lot of <code>undefined or private</code> errors on typespecs that had been working fine with Dialyzer. I got them for things like <code>Plug.Conn.t</code> and <code>Phoenix.LiveView.Socket.t</code>. Is TypeCheck not able to detect types that aren’t explicitly defined with its <code>@spec!</code> syntax?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="231634" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/82">Post #81</a>
	                </div>
	            </div>
              <div id="likers-container-231634" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="231634"
                     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 #81"></div>
  </section>
</div>
    <div class="postbit" id="231696" data-post-id="231696">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Right. The library supports providing remote type “overrides” such that one could reference the original types. See <a href="https://hexdocs.pm/type_check/comparing-typecheck-and-elixir-typespecs.html#remote-type-overrides" rel="noopener nofollow ugc">Remote Type Overrides</a> documentation.</p>
<p>Overrides for most of the standard library ship with the package. Types in external libraries would not exist, but I’m guessing some packages like <code>elixir-type_check-plug</code> and <code>elixir-type_check-phoenix</code> might appear at some point if someone wants to build those things. It’s easy enough to create one-off overrides in your own codebase in the meantime.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="231696" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/83">Post #82</a>
	                </div>
	            </div>
              <div id="likers-container-231696" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="231696"
                     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 #82"></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/32886/load_more?page=9">Load more posts (20 remaining)</a>
</div></template></turbo-stream>