There are several core cases that need to be handled to ensure that all operations on non-nullable data can be lifted to work on nullable data.
- The scalar case: lift
f(x::T)
tof(x::?T)
. - Tuple case: lift
f(xs::Tuple{T1, ..., TN})
tof(x::Tuple{?T1, ..., ?Tn})
. - Single array case: lift
f(xs::Array{T})
tof(xs::Array{?T})
. - Multiple array case: lift
f(xs::Tuple{Array{T1}, ..., Array{Tn}})
tof(xs::Tuple{Array{?T1}, ..., Array{?Tn}})
Others may exist, but these are the obvious cases that we absolutely must resolve.