Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
或者,尝试,并在Scala中验证_Scala_Error Handling_Monads_Scalaz - Fatal编程技术网

或者,尝试,并在Scala中验证

或者,尝试,并在Scala中验证,scala,error-handling,monads,scalaz,Scala,Error Handling,Monads,Scalaz,我对scalaz的或者尝试和验证感到困惑。他们似乎没有一个能满足我的需要。我需要的是一个简单的monadResult[E,R],其中E是错误类型,R是结果类型 或都不合适,因为它不是单子(但投影是)且无偏 Try不合适,因为它的错误类型是Throwable,并且它不完全是monad 验证根本不是单子 你有什么建议?我应该自己写这个结果吗键入?如果你愿意使用Scalaz(听起来像是这样),(通常发音为“disjunction”)正是你想要的-一元的、右偏的版本 它还包括许多其他优秀的东西,这些

我对
scalaz
或者
尝试
验证
感到困惑。他们似乎没有一个能满足我的需要。我需要的是一个简单的monad
Result[E,R]
,其中
E
是错误类型,
R
是结果类型

  • 都不合适,因为它不是单子(但投影是)且无偏
  • Try
    不合适,因为它的错误类型是
    Throwable
    ,并且它不完全是monad
  • 验证
    根本不是单子

你有什么建议?我应该自己写这个
结果吗
键入?

如果你愿意使用Scalaz(听起来像是这样),(通常发音为“disjunction”)正是你想要的-一元的、右偏的
版本


它还包括许多其他优秀的东西,这些东西不是通过标准库中的
的正确投影得到的(
1.正确的
语法,像
++
这样的组合符,来自
验证的转换器等)。

使用任一投影。为什么
Try
不是monad?它违反了什么单子定律?@paradigmatic-
Try
为了安全而违反了单位定律,只有在抛出异常的情况下。如果你有
f:A=>Try[B]
,那么
Try(A)。根据单位定律,flatMap(f)
具有与
f(A)
相同的行为。但是如果
f(a)
抛出异常,
Try
flatMap
将捕获它。因此,在异常情况下,
Try
是非一元的,因为一元性与异常的安全性是不可调和的。由于
Try
的要点是异常安全,因此它有利于安全。(如果您将自己限制为不引发异常的输入,
Try
是一个monad。)是的,尽管它现在被弃用,取而代之的是名称更为笨拙的
\/.fromTryCatchThrowable