use applyOrElse