Naming a not-quite-flatMap method
I would consider creating an Arrow type from Arg[A] to Arg[B], something like:

import scalaz.Arrow // Also available in Cats    

case class ArgArrow[A, B](run: Arg[A] =&gt; Arg[B])

object ArgArrow {
  implicit val arrowInstance: Arrow[ArgArrow] = new Arrow[ArgArrow] {
    def arrTry[A, B](f: A =&gt; Try[B]): ArgArrow[A, B] = ???
    def arrOption[A, B](f: A =&gt; Option[B]): ArgArrow[A, B] = ???
    // implement other required functions
  }
}


With Arrow, it will be very easy to assemble different things together, for example, you can easily combine an A =&gt; B, an A =&gt; Try[C], and an A =&gt; Option[D] into an ArgArrow[A, (B, C, D)].