在Scalaz7进口管理(Managing imports in Scalaz7)

2019-07-03 19:30发布

我使用scalaz7一个项目,有时我跑与进口的问题。 开始最简单的方法是

import scalaz._
import Scalaz._

但有时这可能会导致冲突。 我一直在做的事情到现在为止稍稍如下痛苦的过程:

  • 制定出需要同样的进口作为我的实际代码小例子
  • 复制在一个单独的项目,例如
  • 与该选项编译-Xprint:typer找出代码看起来后的隐式解析
  • 导入所需的implicits在原始项目。

虽然这个工作,我想简化它。 我看到scalaz7有更细粒度的进口,但我不知道他们到底是如何组织的。 举例来说,我看也行

import scalaz.std.option._
import scalaz.std.AllInstances._
import scalaz.std.AllFunctions._
import scalaz.syntax.monad._
import scalaz.syntax.all._
import scalaz.syntax.std.boolean._
import scalaz.syntax.std.all._

等等。

这些子进口如何组织的?

作为一个例子,说我想和验证工作。 我需要,例如注入验证implicits并进行以下编译?

3.fail[String]

怎么样使ValidationNEL[A, B]的一个实例Applicative

Answer 1:

本博客文章解释封装结构和scalaz7详细进口点菜: http://eed3si9n.com/learning-scalaz-day13

为了您的具体的例子,对于3.failure [字符串]你需要:

import scalaz.syntax.validation._

验证已经有一个方法ap

scala> "hello".successNel[Int] ap ((s: String) => "x"+s).successNel[Int]
res1: scalaz.Validation[scalaz.NonEmptyList[Int],java.lang.String] = Success(xhello)

要获得<*>操作符,你需要这样导入:

import scalaz.syntax.applicative._

然后,你可以这样做:

"hello".successNel[Int] <*> ((s: String) => "x"+s).successNel[Int]


文章来源: Managing imports in Scalaz7