注入右侧和左侧使用所需的Scalaz最小进口量

时间:2013-04-25 10:28:19

标签: scala scalaz

简单的问题,我已经看过这个:Managing imports in Scalaz7,但我无法弄清楚如何将rightleft方法最小化地注入到我的对象中来构造实例\/

我确实尝试过:

import syntax.ToDataOps以及To...的其他变体,例如http://eed3si9n.com/learning-scalaz-day13中建议的syntax.ToIdOps

简单示例:

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

class Test {

    def returnEitherT(h: Int): String \/ Int = {
        h right
    }
}

谢谢,杰森。

===========

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

2 个答案:

答案 0 :(得分:4)

syntax.id包含“普通”值的语法,即它不对值的类型施加任何约束。

通常,当您导入x.op形式的表达式的语法时,导入语法的位置取决于x的类型,因为op必须是有效的对那种类型的操作。

由于\/[A, B]是针对A和B的普遍量化,因此使用x.leftx.right语法不会对x的类型施加任何限制。因此,它属于syntax.id

为了理解可用的语法,有必要查看组成syntax包的某些模块的来源。例如,对比IdOps[A],其A的语法为FunctorOps[F[_],A],其FFunctor


我不确定名称id来自何处;也许它与身份仿函数Id有关,可以定义为type Id[A] = A。如果必须为可用于syntax.id的值选择类型约束,则它们将位于Id中。在A中进行普遍量化,操作无法知道A值的结构,因此它们不能在A上进行结构更改操作。

答案 1 :(得分:2)

自scalaz 7以来,正确的导入是:

import scalaz.syntax.either._