A poor man's Option types in C.
See example code for usage.
Operations:
OPTION(type): the signature for options of a given base typetypeNONE: empty constructorJUST: non-empty constructorIS_NONE: checks whether the option type is emptyIS_JUST: checks whether the option type is non-emptyUNWRAP: unwraps the option type after asserting it is non-emptyUNWRAP_OR: unwraps the option type if present, else returns the defaultEQ: compares two options using==; none matches noneEQUAL: compares two options using==; none does not match noneOR: return the first option if present, else the secondAND: return the first option if not present, else the secondIF_LET: unwrap the option if present and execute a blockIF_NOT: execute a block if the option is not present