Monad Option
Alternative Option
We should use `OptionM` instead. `Option` still implements `Functor` and `OrElse`. cc @Kha