Couldn't transform and transforOrFail be combined into one function? Checking if the return value is an Effect. It might be convenient as well to allow one side of the transformation (that could potentially fail) to return a ParseResult while another side could just return the value (if it can't fail)