<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="194477" data-post-id="194477">
  <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/qqwy" rel="nofollow">@Qqwy</a> - I’ve been thinking about TypeCheck in regards to remote types and wondering about your thoughts. I use TypeCheck for the following:</p>
<ol>
<li>As a runtime checker for builtin elixir types. They are not all there, but most are.</li>
<li>As a way to write tighter custom requirements than can be written via guards or regular specs.</li>
<li>As a way to automatically generate traditional specs for compile-time.</li>
</ol>
<p>I know it provides generators and manual compile time checking, but I just haven’t used them yet.</p>
<p>The one sticking point for me has probably been interoperability with libraries/modules that do not use TypeCheck. Referencing a remote type, of course, results in a compile-time error. This means that not only can the remote type not be type checked, but it can’t generate a traditional typespec. I can write a traditional typespec, but now I have a mix of <code>@spec</code> and <code>@spec!</code> in my codebase. I’d rather just write <code>@spec!</code> everywhere.</p>
<p>You mention thinking about some sort override configuration for remote types. It does make me wonder though if TypeCheck should/can just double down on runtime checking and ignore remote types altogether. Basically, if TypeCheck encounters something like <code>Ecto.UUID.t()</code> and doesn’t have a known way to handle it it is ignored, BUT is still included in the generated traditional typespecs. It handles the things it can and doesn’t harm the things it can’t.</p>
<p>Perhaps it is just not a concern of TypeCheck to deal with this and that is okay. TypeCheck would still be providing value in that case by generating the traditional spec for tools dedicated to compiled spec checking like Dialyzer and Selectrix.</p>
<p>The obvious caveat here is that people may assume TypeCheck is checking things that it is not and silently ignoring them. First, I just don’t know that this is that big of a deal assuming the documentation prominently mentions that remote types are not checked. Second, it is always possible for one to write custom TypeCheck-compatible types or even create TypeCheck support packages for common libraries. Lastly, I’m just thinking the value gained by ignoring checks (but generating traditional specs) outweighs the current situation where you can’t reference them at all.</p>
<p>I don’t know if this is doable or something you would want to consider, but throwing it out here in case it never seemed like an option.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="194477" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/44">Post #43</a>
	                </div>
	            </div>
              <div id="likers-container-194477" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194477"
                     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="194502" data-post-id="194502">
  <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>Hi <a class="mention" href="/u/baldwindavid" rel="nofollow">@baldwindavid</a>.</p>
<aside class="quote no-group" data-username="baldwindavid" data-post="44" data-topic="32886">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/baldwindavid/48/17559_2.png" class="avatar"> baldwindavid:</div>
<blockquote>
<p>You mention thinking about some sort override configuration for remote types. It does make me wonder though if TypeCheck should/can just double down on runtime checking and ignore remote types altogether.</p>
</blockquote>
</aside>
<p>It is a valid concern. My opinion on the matter is to prefer explicit overrides over ‘implicitly doing nothing’, because the latter has great bug-hiding potential. That said, I definitely want to make it simple for people to opt-out by e.g. specifying that <em>a particular</em> remote type should be treated equivalent to <code>any()</code>. (But this should not be the default).</p>
<p>Now obviously the current situation in which remote types cannot properly be used at all is painful. I hope to resolve this as soon as possible (I have some time in the next few weeks to work on this, luckily).</p>
<aside class="quote no-group">
<blockquote>
<ol start="3">
<li>As a way to automatically generate traditional specs for compile-time.</li>
</ol>
</blockquote>
</aside>
<p>I’m very interested in what this looks like! Please share an example! <img src="https://forum.elixirforum.com/images/emoji/apple/grin.png?v=15" title=":grin:" class="emoji" alt=":grin:" 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="194502" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/45">Post #44</a>
	                </div>
	            </div>
              <div id="likers-container-194502" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194502"
                     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="194506" data-post-id="194506">
  <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>Fair enough. Just being able to reference remote types will be excellent. I guess I’m picturing a world where something like Selectrix provides an extra level of protection to avoid those hidden bugs, but I can appreciate wanting to flag those issues during run-time via a bit of additional configuration.</p>
<aside class="quote no-group" data-username="Qqwy" data-post="45" data-topic="32886">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/qqwy/48/1349_2.png" class="avatar"> Qqwy:</div>
<blockquote>
<p>I’m very interested in what this looks like! Please share an example!</p>
</blockquote>
</aside>
<p>I just mean that under the hood TypeCheck is generating traditional typespecs that something like Dialyzer or Selectrix could theoretically use. Right? I don’t use Dialyzer, but that was my (perhaps mistaken) assumption.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="194506" 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/typecheck-fast-and-flexible-runtime-type-checking-for-your-elixir-projects/32886/46">Post #45</a>
	                </div>
	            </div>
              <div id="likers-container-194506" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194506"
                     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="194510" data-post-id="194510">
  <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">
								<aside class="quote no-group" data-username="baldwindavid" data-post="46" data-topic="32886">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/baldwindavid/48/17559_2.png" class="avatar"> baldwindavid:</div>
<blockquote>
<p>I just mean that under the hood TypeCheck is generating traditional typespecs that something like Dialyzer or Selectrix could theoretically use. Right? I don’t use Dialyzer, but that was my (perhaps mistaken) assumption.</p>
</blockquote>
</aside>
<p>Ah! Yes, TypeCheck indeed generates traditional Dialyzer-compatible typespecs.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="194510" 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/47">Post #46</a>
	                </div>
	            </div>
              <div id="likers-container-194510" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194510"
                     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="194515" data-post-id="194515">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Sandbox do
    use TypeCheck

    @spec! foo(binary, binary | atom, float) :: float

    def foo(arg1, arg2, arg3) do
        #some process
  end
end
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(4)&gt; Sandbox.foo("bing", :ok, 5.712)    
** (TypeCheck.TypeError) The result of calling `foo("bing", :ok, 5.712)` does not adhere to spec `foo(binary(),  binary() | atom(),  float()) :: float()`. Reason:
  Returned result:
    `:ok` is not a float.
    lib/Sandbox.ex:1: Sandbox.foo/3
</code></pre>
<p>As you can see, <code>arg2</code> can be either a string or an atom. What’s the proper TypeCheck syntax to get this to spec to pass?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="194515" 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/48">Post #47</a>
	                </div>
	            </div>
              <div id="likers-container-194515" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194515"
                     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="194517" data-post-id="194517">
  <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>That error is a mismatch on the function result rather than the arguments. The result is specified as <code>float</code>, but the function is returning <code>:ok</code>.</p>
<p>If the function can return either a string or atom, the spec could be changed to:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">@spec! foo(binary, binary | atom, float) :: binary | atom
</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="194517" 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/49">Post #48</a>
	                </div>
	            </div>
              <div id="likers-container-194517" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194517"
                     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="194518" data-post-id="194518">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Got it, thanks!</p>
<p>Here’s a separate issue:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Sandbox do
  use TypeCheck

  @spec! main(list, binary) :: binary | list
  def main(arg1, arg2) when arg1 == [] do
    # some process
  end

  @spec! main(list, binary) :: list
  def main(arg1, arg2) when arg1 != [] do
    # some process
  end
end
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(5)&gt; recompile             
Compiling 1 file (.ex)
warning: this clause for __type_check_spec_for_main/2__/0 cannot match because a previous clause at line 1 always matches
  lib/type_check/spec.ex:1
</code></pre>
<p>How do I avoid this warning?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="194518" 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/50">Post #49</a>
	                </div>
	            </div>
              <div id="likers-container-194518" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194518"
                     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="194519" data-post-id="194519">
  <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>You only need a single <code>@spec!</code> declaration to cover multiple function heads of the same name and arity. You’re getting a warning there because the second declaration of <code>@spec! main</code> can’t possibly match anyway as any <code>list</code> would already have matched on the first <code>@spec! main</code> declaration.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="194519" 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/51">Post #50</a>
	                </div>
	            </div>
              <div id="likers-container-194519" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194519"
                     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>
    <div class="postbit" id="194520" data-post-id="194520">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Nice! Got it, thanks so much <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="194520" 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/52">Post #51</a>
	                </div>
	            </div>
              <div id="likers-container-194520" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194520"
                     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 #51"></div>
  </section>
</div>
    <div class="postbit" id="194542" data-post-id="194542">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Print do
    use TypeCheck

    def utc_time, do: DateTime.utc_now()

    @spec! higlight(binary | number | list | atom) :: atom
    def highlight(message) do
        timestamp = @blue &lt;&gt; "#{utc_time()}-"
        text = @light_green &lt;&gt; "#{message}"

        IO.puts("#{timestamp} #{text} \n")
    end

end
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(14)&gt; recompile             
Compiling 1 file (.ex)

== Compilation error in file lib/Print.ex ==
** (ArgumentError) spec for undefined function higlight/1
(type_check 0.2.3) lib/type_check/macros.ex:94: anonymous fn/4 in TypeCheck.Macros.wrap_functions_with_specs/3
(elixir 1.10.3) lib/enum.ex:2111: Enum."-reduce/3-lists^foldl/2-0-"/3
(type_check 0.2.3) lib/type_check/macros.ex:92: TypeCheck.Macros.wrap_functions_with_specs/3
(type_check 0.2.3) expanding macro: TypeCheck.Macros.__before_compile__/1
lib/Print.ex:1: Print (module)
** (exit) shutdown: 1
(mix 1.10.3) lib/mix/tasks/compile.all.ex:62: Mix.Tasks.Compile.All.do_compile/4
(mix 1.10.3) lib/mix/tasks/compile.all.ex:27: anonymous fn/2 in Mix.Tasks.Compile.All.run/1
(mix 1.10.3) lib/mix/tasks/compile.all.ex:43: Mix.Tasks.Compile.All.with_logger_app/2
(mix 1.10.3) lib/mix/task.ex:330: Mix.Task.run_task/3
(mix 1.10.3) lib/mix/tasks/compile.ex:96: Mix.Tasks.Compile.run/1
(mix 1.10.3) lib/mix/task.ex:330: Mix.Task.run_task/3
(iex 1.10.3) lib/iex/helpers.ex:104: IEx.Helpers.recompile/1
</code></pre>
<p>Still getting my feet wet but, so far, I absolutely love TypeCheck. Ok, so, what’s going on with this error message and how do I keeping it from cropping up again in the future?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="194542" 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/53">Post #52</a>
	                </div>
	            </div>
              <div id="likers-container-194542" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="194542"
                     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 #52"></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=6">Load more posts (50 remaining)</a>
</div></template></turbo-stream>