title: Functions with generic parameter types
body: <p>I am trying to figure out how to define a function that works on multiple types of parameters (e.g. int and int64). As I understand it, function overloading is not possible in F# (certainly the compiler complains). Take for example the following function.</p>
  
  <pre><code>let sqrt_int = function
      | n:int   -&gt; int (sqrt (float n))
      | n:int64 -&gt; int64 (sqrt (float n))
  </code></pre>
  
  <p>The compiler of course complains that the syntax is invalid (type constraints in pattern matching are not supported it seems), though I think this illustrates what I would like to achieve: a function that operates on several parameter types and returns a value of the according type. I have a feeling that this is possible in F# using some combination of generic types/type inference/pattern matching, but the syntax has eluded me. I've also tried using the :? operator (dynamic type tests) and <em>when</em> clauses in the pattern matching block, but this still produces all sorts errors.</p>
  
  <p>As I am rather new to the language, I may very well be trying to do something impossible here, so please let me know if there is alternative solution.</p>