title: Confused about racket contracts
body: <p>I defined a function <code>true?</code> for use with <a href="http://docs.racket-lang.org/reference/pairs.html?q=count&amp;q=let&amp;q=regexp-match&amp;q=string-match&amp;q=search#%28def._%28%28lib._racket/list..rkt%29._count%29%29" rel="noreferrer">count</a> in racket/list.</p>
  
  <pre><code>(define (true? expr)
    (and (boolean? expr) expr #t))
  </code></pre>
  
  <p>I noticed I could provide it numeric arguments and my function would happily return <code>#f</code>.</p>
  
  <pre><code>&gt; (true? 6)
  #f
  </code></pre>
  
  <p>So, I thought I would explore using a racket contract to make non-boolean arguments return an error in contract violation.  So I put this code at the tope of my file:</p>
  
  <pre><code>(provide (contract-out
            [true?         (-&gt; boolean? boolean?)]))
  </code></pre>
  
  <p>However, after adding the contract I still get the same behavior as above in the racket REPL.  I don't understand how that could be.  What am I missing?</p>