added Either and Result