C#'s can't make `notnull` type nullable : <p>I'm trying to create a type similar to Rust's <code>Result</code> or Haskell's <code>Either</code> and I've got this far:</p>

<pre><code>public struct Result&lt;TResult, TError&gt;
    where TResult : notnull
    where TError : notnull
{
    private readonly OneOf&lt;TResult, TError&gt; Value;
    public Result(TResult result) =&gt; Value = result;
    public Result(TError error) =&gt; Value = error;

    public static implicit operator Result&lt;TResult, TError&gt;(TResult result)
        =&gt; new Result&lt;TResult, TError&gt;(result);

    public static implicit operator Result&lt;TResult, TError&gt;(TError error)
        =&gt; new Result&lt;TResult, TError&gt;(error);

    public void Deconstruct(out TResult? result, out TError? error)
    {
        result = (Value.IsT0) ? Value.AsT0 : (TResult?)null;
        error = (Value.IsT1) ? Value.AsT1 : (TError?)null;
    }  
}
</code></pre>

<p>Given that both types parameters are restricted to be <code>notnull</code>, why is it complaining (anywhere where there's a type parameter with the nullable <code>?</code> sign after it) that:</p>

<blockquote>
  <p>A nullable type parameter must be known to be a value type or non-nullable reference type. Consider adding a 'class', 'struct', or type constraint.</p>
</blockquote>

<p>?</p>

<hr>

<p>I'm using C# 8 on .NET Core 3 with nullable reference types enabled.</p>
