我在一个项目中使用 scalaz7,有时我会遇到导入问题。最简单的入门方法是
import scalaz._
import Scalaz._
但有时这会导致冲突。到目前为止,我一直在做以下稍微痛苦的过程:
- 制定一个需要与我的实际代码相同的导入的最小示例
- 将该示例复制到单独的项目中
- 使用选项编译它
-Xprint:typer
以找出代码在隐式解析后的样子 - 在原始项目中导入所需的隐式。
虽然这可行,但我想简化它。我看到 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._
等等。
这些子导入是如何组织的?
例如,假设我想使用验证。我需要什么,例如注入验证隐式并进行以下编译?
3.fail[String]
做ValidationNEL[A, B]
一个实例怎么样Applicative
?