large portion of functional refactor. either ftw
continuing Either refactor