either

    4热度

    2回答

    比方说我给定的XML如下: <a><b><c>hello</c><d>world</d><e>again</e></b></a> 我给定的函数:getXmlStream其具有以下特征: def getXmlStream(xmlPath:String):Either[String,Option[NodeSeq]] 当我调用getXmlStream并传入一个路径时,我会得到左边是错误,右边是选

    2热度

    3回答

    在对一组类型为Either [String,A](其中A是多于一个类型)的Eithers进行匹配之后,我想将左侧的任何字符串累积到列表中。 (a, b, c, d, e) match { case (Right(a), Right(b), Right(c), Right(d), Right(e)) => { "All good, use a, b, c, d, and e!"

    5热度

    4回答

    我知道这是可以改变包装类型,这样就可以有 f :: (a -> m b) g :: (b -> m c) f >>= g :: (a -> m c) 但有可能改变m?如果m是MonadError并且由Either ErrorA和Either ErrorB实现,我可以以某种方式链接它们吗?显然我不能直接链接它们,因为Left的类型是什么?不过,我在我结束了在这两种情况下调用show的情况,但

    8热度

    3回答

    我想知道是否有可能创建某种“方法调用链”,所有方法返回相同的[错误,结果]。 我想要做的是:连续调用所有的方法,当方法返回一个Left(Error)时,然后停止方法调用并返回在调用链中找到的第一个Left。 我试了一些东西,折叠,地图,预测......但我是新来的斯卡拉,并没有找到任何优雅的解决方案。 我tryed一些东西像: def createUserAndMandatoryCategorie

    10热度

    1回答

    我想知道我的方法的签名应该如何,以便优雅地处理不同类型的故障。 这个问题在某种程度上是我已经有很多关于Scala错误处理的问题的总结。你可以在这里找到一些问题: Throwing exceptions in Scala, what is the "official rule" Either, Options and for comprehensions Either monadic operati

    3热度

    3回答

    首先,我的Either秒的(无限)列表,这是产生这样的: x :: A ... f :: A -> Either B A ... xs :: [Either B A] xs = iterate (>>=f) (Right x) 列表将包含几个Right S(总是有限数目)和然后重复相同的值Left。我需要的是采取所有的Right和一个Left后面。在这种特殊情况下,它也可以通过改

    5热度

    2回答

    我一直在努力通过great good书,但我正在用Applicative Functors稍微挣扎。 在以下示例中max应用于两个Maybe函数的内容,并返回Just 6。 max <$> Just 3 <*> Just 6 为什么在下面的例子Left "Hello"返回,而不是要么仿函数的内容:Left "Hello World"? (++) <$> Left "Hello" <*> Lef

    8热度

    3回答

    我需要将Iterable [Throwable,String]减少到[Throwable,Iterable [String]]。我不知道这个操作是否很常见,在Iterable特征上没有发现任何东西。所以我写了这个功能: def reduce[A, B](xs: Iterable[Either[A, B]]): Either[A, Iterable[B]] = xs.collectFirs

    8热度

    1回答

    我听说有些人在Scala中倾向于(像其他函数式语言一样)不要打断控制流程......而是按照惯例我们返回错误EitherLeft。 但是,我们如何从这个异常中得到散记? 现在我回到左边一个简单的Error案例类与代码,消息和原因(Error太)。但是,如果我有一个错误,我无法获得堆栈跟踪。 如果我的应用程序变得复杂,则可能很难找到返回Error的代码块......根本原因很重要。 那么我们在实践中

    1热度

    1回答

    假设你有一个看起来像这样的EitherT: type StateListOfString[+T] = State[List[String], T] type MyEitherT = EitherT[StateListOfString, Int, Boolean] 如果你有一个换理解,可以返回左: my computation = for { a <- thingThatCouldR