<div dir="ltr"><div>Here's an out-of-the-box option, using Racket's <a href="http://docs.racket-lang.org/reference/match.html#%28form._%28%28lib._racket%2Fmatch..rkt%29._define%2Fmatch%29%29">pattern matching</a> with the (? predicate) form:</div>

<div><br></div><div><font face="courier new, monospace">(define/match (dup a)</font></div><div><font face="courier new, monospace">  [((? string?)) (string-append a a)]</font></div><div><font face="courier new, monospace">  [((? integer?)) (list a a)])</font></div>

<div><br></div><div>Dan</div><div class="gmail_extra"><div dir="ltr"></div>
</div></div>