Removing a layer of indirection when you had a reference type anyway is an optimization that runs into the issue that you describe.  The obvious solution is to not apply it when null is already a valid inhabitant of that reference type.<p>Without collapsing that indirection, Option&lt;Option&lt;T&gt;&gt; is perfectly expressible:<p><pre><code>    Just (Just foo): &lt;ptr&gt; -&gt; &lt;ptr&gt; -&gt; foo
    Just Nothing: &lt;ptr&gt; -&gt; &lt;0&gt;
    Nothing: &lt;0&gt;
</code></pre>
It&#x27;s true that some languages expose &quot;nullable references&quot; as a distinct type and <i>not</i> a detail of representation, and it&#x27;s true (... and sometimes obnoxious) that this doesn&#x27;t layer as nicely (in particular, it&#x27;s not a functor).