Special values like NaN are half-assed sum types. The latter give you compiler guarantees.
In my opinion it’s overall cleaner if the compiler handles enforcing it when it can. Something like “ensure variable is initialized” can just be another compiler check.
Combined with an effects system that lets you control which errors to enforce checking on or not. Nim has a nice `forbids: IOException` that lets users do that.
if name != nil:
echo name
versus case name
of Some(unwrappedName):
echo unwrappedName