Replace Option with Either for error message propagation