Inference now uses `Either` for failure too