title: How is this polymorphic value dealt with when used as a value of multiple types?
body: <p>Given this line of code (which I first saw in <a href="https://stackoverflow.com/a/12738163/894284">this answer</a>):</p>
  
  <pre><code>pVal :: Num a =&gt; a
  pVal = sum . map fromIntegral $ ([1..10000000] :: [Int])
  </code></pre>
  
  <p>If it's used as multiple types, is the expression completely reevaluated for each type?  Is one result for each type kept around?</p>
  
  <p>For example:</p>
  
  <pre><code>pInt :: Int
  pInt = pVal
  
  pDub :: Double
  pDub = pVal
  </code></pre>