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