title: Do checks like `hash?` in Racket support duck-typing?
body: <p>I'm a Python programmer new to Racket...</p>
  <p>I have seen some code like:</p>
  <pre class="lang-lisp prettyprint-override"><code>(define table/c (and/c hash? (not/c immutable?)))
  </code></pre>
  <p>I understand this to be a use of Contracts, i.e.
  <a href="https://docs.racket-lang.org/reference/data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" rel="nofollow noreferrer">https://docs.racket-lang.org/reference/data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29</a></p>
  <p>So it means that anywhere in this library which accepts a <code>table/c</code> arg, it should be an object which is a mutable hash-table.</p>
  <p>My question is... does Racket have any support for duck-typing here (specifically to satisfy the contract of <code>hash?</code>)?</p>
  <p>Say I wanted to replace the basic hash-table with something backed by a k/v store... Is there a 'hash-table' interface I could implement that would allow my store-backed custom object to pass a <code>hash?</code> contract check?</p>
  <p>The docs for contracts and <a href="https://docs.racket-lang.org/reference/hashtables.html#%28def._%28%28quote._%7E23%7E25kernel%29._hash%7E3f%29%29" rel="nofollow noreferrer">this for the <code>hash?</code> check</a> didn't help me much.</p>