add reduceRightOption & reduceLeftOption