1
既存のコンビネータやより良い書き方がありますか?Kleisli [Try、I、A]をI => Aに変換する方法
def combine[I, A](k: Kleisli[Try, I, A], default: A) : I => A =
k.run.andThen(_.getOrElse(default))
既存のコンビネータやより良い書き方がありますか?Kleisli [Try、I、A]をI => Aに変換する方法
def combine[I, A](k: Kleisli[Try, I, A], default: A) : I => A =
k.run.andThen(_.getOrElse(default))
アイデンティティを使用してモナド値にマッピングを行うことが可能です:
def combine[I, A](k: Kleisli[Try, I, A], default: A): I => A =
k.mapF[Id, A](_.getOrElse(default)).run
例:
scala> val div = Kleisli[Try, Int, String](x => Try(1000/x).map(_.toString))
div: cats.data.Kleisli[scala.util.Try,Int,String] = Kleisli(<function1>)
scala> combine(div, "Good")(10)
res0: String = 100
scala> combine(div, "Division by zero")(0)
res1: String = Division by zero