从选项中使用Monad Transformer - >或

时间:2015-04-08 17:40:02

标签: scala monads

考虑以下方法,

scala> def f(x: Option[String]): Either[String, Int] = x match {
        case Some(x) => try { Right(x.toInt) } 
                        catch { 
                          case _:  NumberFormatException => Left(s"Not an int: $x") 
                        }
        case None    => Left("No String present.")
      }
f: (x: Option[String])Either[String,Int]

测试

scala> f(None)
res0: Either[String,Int] = Left(No String present.)

scala> f(Some("44"))
res2: Either[String,Int] = Right(44)

scala> f(Some("zipp"))
res3: Either[String,Int] = Left(Not an int: zipp)

如何在这里使用Monad变压器?

注意 - 我不知道它是否是一个很好的例子,因为它太短了(模式匹配可能是最干净的方式),但无论如何我很好奇。 / p>

0 个答案:

没有答案