scala - scalaz.syntax.monad._ brokes应用语法

  显示原文与译文双语对照的内容
61 2

我有一些使用应用和monad语法的代码。 代码如下所示:


 import scalaz._
 import scalaz.syntax.applicative._
 import scalaz.syntax.std.boolean._
 import scalaz.syntax.traverse._
//import scalaz.syntax.monad._

 def getPackage[P](implicit pkg: NpmPackage[P]): ValidationNel[String, P] = {
 val installPackage = (pkg: String) => install(pkg).??!!

 lazy val getPackage = pkg.commands.traverseU {
 (c: String) => (binDir |@| binaryForPackage[P](c)) {
 (a: File,b:File) => c -> a/pkg.packageName/b.toString
 }
 } map (_.toMap) map (pkg.newPackage)

 hasPackage(pkg.packageName)?
 getPackage |
 (installPackage(pkg.packageName) flatMap (_ => getPackage))
 }

代码编译不出问题,只要我想用导入 flatMap 方法的>>= 方法替换方法,我得到以下错误:


 [error] value |@| is not a member of scalaz.ValidationNel[String,sbt.File]
 [error] (c: String) => (binDir |@| binaryForPackage[P](c)) {

我想我在导入中做出了一些错误,但是我无法理解为什么导入brokes语法。

我正在使用 scalaz 7.1.0 -M2.

时间: 原作者:

99 0

monad语法通过扩展包含了跨浏览器应用语法,因此你可以删除 applicative._ 导入,只需离开 monad._ 导入。 另一方面,如果只需要使用 apply 功能和 bind,你可以只导入它们:


import scalaz.syntax.apply._
import scalaz.syntax.bind._

原作者:
...