title: Not undestanding generics in F#
body: <p>Let's assume this code:</p>
  
  <pre><code>let ToLower x = (string x).ToLower()
  </code></pre>
  
  <p>I can call it with:</p>
  
  <pre><code>ToLower 3
  </code></pre>
  
  <p>or:</p>
  
  <pre><code>ToLower 3.0
  </code></pre>
  
  <p>but not both since the first caller defines the type.
  so, I did this change, with my C# knowledge of generics:</p>
  
  <pre><code>let ToLower (x : 'a) = (string x).ToLower()
  </code></pre>
  
  <p>but same problem, it looks like the first caller is specializing the generic and that's it.</p>
  
  <p>I'm looking for a solution where the compiler will generate n versions of the assignment, as needed based on the use cases.</p>
  
  <p>What is the proper way to achieve this in F#?</p>