Why has the behaviour of Lazy.CreateFromValue changed in F# between .NET framework versions? : <p>I just encountered a change in behaviour between framework versions when compiling this piece of code in F#:</p>

<pre><code>let test = Lazy.CreateFromValue 1
</code></pre>

<p>Compiled against .NET framework 2.0, the expression results in an "already created" Lazy object, that is:</p>

<pre><code>test.IsValueCreated = true
</code></pre>

<p>When compiled against .NET framework 4.0, the expression results in an "unevaluated" lazy object, that is:</p>

<pre><code> test.IsValueCreated = false
</code></pre>

<p>Only after accessing <strong>test.Value</strong> in the latter case the two are equivalent.</p>

<p>I couldn't find any reference to this change anywhere, hence my question is why does this behave differently and what was the reasoning behind the change (it's breaking). In my opinion, the behaviour in .NET 2.0 makes more sense - creating a Lazy object from a concrete value should result in an "already evaluated" lazy object.</p>
