tailrec annotation
collectFirst partialFunction