Types

TanayLabUtilities.Types Module

(Very) generic types.

We got sick and tired of writing Union{..., Nothing} everywhere. We therefore created this shorthand unions listed below and used them throughout the code. We're well aware there was a religious war of whether there should be a standard shorthand for this, vs. a standard shorthand for Union{..., Missing}, with everyone losing, that is, having to use the explicit Union notation everywhere.

Looking at the answers here then Nothing means "there is no value" and Missing means "there is a value, but we don't know what it is" ( Unknown might have been a better name).

Under this interpretation, Union{..., Nothing} has (almost) the same semantics as Haskell's Maybe , so that's what we called it (other languages call this Optional or Opt ). It is used heavily in our (and a lot of other) Julia code. We also added Unsure as a shorthand for Union{..., Missing} for completeness, but we do not actually use it anywhere. We assume it is useful for Julia code dealing specifically with statistical analysis.

Note

Yes, there's the Some type. Which is cumbersome to use. Take for example foo(; parameter::Maybe{Int} = nothing) . Using Some would mean callers would have to write foo(parameter=Some(5)) . Yuck.

TanayLabUtilities.Types.Maybe Type
Maybe{T} = Union{T, Nothing}

The type to use when maybe there is a value, maybe there isn't. This is exactly as if writing the explicit Union with Nothing but is shorter and more readable. This is extremely common in our code.

TanayLabUtilities.Types.Unsure Type
Unsure{T} = Union{T, Missing}

The type to use when maybe there always is a value, but sometimes we are not sure what it is. This is exactly as if writing the explicit Union with Missing but is shorter and more readable. This is only used in code dealing with statistics to represent missing (that is, unknown) data. It is only provided here for completeness.

Index