Eh... it's exceedingly common to want to determine whether or not two expressions both evaluate to "unknown" (e.g. null = null). I literally wrote a query that needed to respect null equality yesterday. Extending your examples it would be the equivalent of asking:
"Is the answer to 'Are they of the same age?' the same as the answer to 'Do car colors differ?'"
Both answers are "I don't know". So... are they the same answer? The human in me says "Yes".
Of course you will recognize the similarity between the above and your first example. The interesting part is in the subtle difference between:
"Are they of the same age?" --> "I don't know"
and
2. "Is the answer to 'What is James' age?' the same as the answer to 'What is Jane's age?'" --> "Yes"
The answer to number 2 relies on the fact that I _know_ I don't know _either_ of their ages. This extra piece of knowledge allows me to "lift" null into a value rather than the absence of. It's the difference between:
The answer to "Are they the same age?" is not really "I don't know". Try answering "I don't know" to a question during a quiz or an exam, it's very unlikely that your answer will be considered correct (even if it's actually true that you don't know it).
You don't know the answer to the question "Are they the same age" (but it's either true of false), and you don't know the answer to the question "Do car colors differ" (it's either true or false). If you don't know the answer to either question then you don't know whether the answers differ either.
"Is the answer to 'Are they of the same age?' the same as the answer to 'Do car colors differ?'"
Both answers are "I don't know". So... are they the same answer? The human in me says "Yes".
Of course you will recognize the similarity between the above and your first example. The interesting part is in the subtle difference between:
"Are they of the same age?" --> "I don't know"
and
2. "Is the answer to 'What is James' age?' the same as the answer to 'What is Jane's age?'" --> "Yes"
The answer to number 2 relies on the fact that I _know_ I don't know _either_ of their ages. This extra piece of knowledge allows me to "lift" null into a value rather than the absence of. It's the difference between:
`Maybe<T>.value == Maybe<T>.value`
and
`Maybe<T> == Maybe<T>`