Module docstring
{"# Option of a type
This file develops the basic theory of option types.
If α is a type, then Option α can be understood as the type with one more element than α.
Option α has terms some a, where a : α, and none, which is the added element.
This is useful in multiple ways:
* It is the prototype of addition of terms to a type. See for example WithBot α which uses
none as an element smaller than all others.
* It can be used to define failsafe partial functions, which return some the_result_we_expect
if we can find the_result_we_expect, and none if there is no meaningful result. This forces
any subsequent use of the partial function to explicitly deal with the exceptions that make it
return none.
* Option is a monad. We love monads.
Part is an alternative to Option that can be seen as the type of True/False values
along with a term a : α if the value is True.
"}