Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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
Scalaz注入右侧和左侧使用所需的最小导入_Scala_Scalaz - Fatal编程技术网

Scalaz注入右侧和左侧使用所需的最小导入

Scalaz注入右侧和左侧使用所需的最小导入,scala,scalaz,Scala,Scalaz,简单的问题,我已经看过了:,但我不知道如何将right和left方法最少地注入到我的对象中来构造\/的实例 我确实试过: import syntax.ToDataOps和到…的其他变体,如中建议的syntax.ToIdOps 简单的例子: import scalaz.{\/, syntax} import // What goes here class Test { def returnEitherT(h: Int): String \/ Int = { h righ

简单的问题,我已经看过了:,但我不知道如何将
right
left
方法最少地注入到我的对象中来构造
\/
的实例

我确实试过:

import syntax.ToDataOps
到…
的其他变体,如中建议的
syntax.ToIdOps

简单的例子:

import scalaz.{\/, syntax}
import // What goes here

class Test {

    def returnEitherT(h: Int): String \/ Int = {
        h right
    }
}
谢谢,杰森

===========


我通过使用
import syntax.id.解决了这个问题,但我不确定为什么会这样。

syntax.id
包含“普通”值的语法,即它对值的类型没有任何限制

通常,当您为形式为
x.op
的表达式导入语法时,导入语法的位置取决于
x
的类型,因为
op
需要是该类型上的有效操作

因为
\/[A,B]
对于A和B是普遍量化的,所以使用语法
x.left
x.right
x
的类型没有限制。因此,它属于
syntax.id

为了更好地理解在哪里可以使用什么语法,有必要查看组成
语法
包的一些模块的源代码。例如,contrast,它具有任何
A
的语法,与,它要求
F
Functor



我不确定名称
id
的确切来源;可能它与标识函子
Id
有关,该函子可以定义为
类型Id[A]=A
。如果必须为可与
syntax.id
一起使用的值选择类型约束,则它们应该位于
id
中。由于在
A
中普遍量化,操作无法知道
A
值的结构,因此它们不能是
A

上的结构改变操作,因为scalaz 7的正确导入是:

import scalaz.syntax.either._

你应该让你的解决方案成为答案——我认为有很多徽章可以回答你自己的问题etc@NoelM谢谢,但在这种情况下,我会同意Ben的答案,因为他理解原因。对于最新版本的Scalaz,这可能不再是100%正确。当然,scalaz.syntax.id.right被弃用,取而代之的是scalaz.syntax.other.right