我有一些使用应用程序和单子语法的代码。代码如下所示:
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
方法时出现以下错误:>>=
scalaz.syntax.monad._
[error] value |@| is not a member of scalaz.ValidationNel[String,sbt.File]
[error] (c: String) => (binDir |@| binaryForPackage[P](c)) {
我想我在导入时做错了,但我不明白为什么导入 monad 语法会破坏|@|
运算符以及如何让两种语法一起工作,有什么解决方案吗?
我正在使用 scalaz 7.1.0-M2。