У меня есть код, который использует либо аппликативный, либо синтаксис монады. Код выглядит следующим образом:scalaz.syntax.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
метод с >>=
метод импорта scalaz.syntax.monad._
я получил следующее сообщение об ошибке:
[error] value |@| is not a member of scalaz.ValidationNel[String,sbt.File]
[error] (c: String) => (binDir |@| binaryForPackage[P](c)) {
Я полагаю, что я «Я делаю что-то не так в импорте, но я не могу понять, зачем импортировать синтаксис монады, обманывает оператора |@|
и как разрешить оба синтаксиса работать вместе, любое решение?
Я использую scalaz 7.1.0-M2.