The `value` you are returning has type T.  T is not the same type as Optional&lt;T&gt;.<p>With AnimalMuppet&#x27;s approach, you would need to return a pointer to a T (so, `&amp;value` in something Cish).  Note that this is <i>not</i> the same thing as a nullable reference in, for instance, C#.<p>`null or T` is a valid representation only when T is a non-nullable reference.  It doesn&#x27;t work when T is optional, and it also doesn&#x27;t work when T is a primitive type, a struct, &amp;c.<p>That said, there&#x27;s obvious reasons it might be wanted an optimization where it&#x27;s possible.  For that specific case, `Just value` could be specialized to `value`, but that can be done by the compiler (akin to automatic unboxing, elsewhere).