将Scalaz升级到7.2后ValidationNel错误

问题描述 投票:0回答:1

将Scalaz版本升级到7.2后,我遇到了验证问题。以下代码适用于之前的Scalaz版本。

 def registerOrUpdate(enc: EncAdt, dx: List[DiagnosisAdt], provs: List[Provider], plans: List[InsurancePlan]): ValidationNel[AdtError, String \/ Int] = {
        // First check that admit date is after contract start
        enc.admitDT.fold[ValidationNel[AdtError, String \/ Int]](
          MissingAdmitDate(enc).failureNel
        ) { admitTstamp =>
          val beforeContractDate = fac.dosStart.exists(_ isAfter new DateTime(admitTstamp.getTime))
          if (enc.accountNumber.trim == "") {

            MissingFin(enc).failureNel
          } else {
             ...

在升级Scalaz版本后,正在生成以下问题。

fold does not take type parameters

任何解决方案都是可观的。

scala scalaz
1个回答
0
投票

既然你再次没有在你的问题中提供Minimal, Complete, and Verifiable example,那么很难帮助你。如果我从我的AdtValidation复制第一个previous answer仍然是:

object AdtValidation {

  type AdtValidation[A] = ValidationNel[AdtError, A]

  implicit class AdtValidationSuccess[A](val value: A) extends AnyVal {
    def successAdt: AdtValidation[A] = Validation.success[NonEmptyList[AdtError], A](value)
  }

  implicit class AdtValidationFailure(val value: AdtError) extends AnyVal {
    def failureAdt[A]: AdtValidation[A] = Validation.failureNel[AdtError, A](value)
  }
}

然后你的代码的以下简化为我编译(假设你定义了其他类,如EncAdtMissingAdmitDate

import AdtValidation._

// the original works as well but this seems better to me
def registerOrUpdate(enc: EncAdt): AdtValidation[String \/ Int] = {
//def registerOrUpdate(enc: EncAdt): ValidationNel[AdtError, String \/ Int] = {
  // First check that admit date is after contract start
  enc.admitDT.fold[ValidationNel[AdtError, String \/ Int]](
    //  MissingAdmitDate(enc).failureNel
    MissingAdmitDate(enc).failureAdt
  ) { admitTstamp =>
    //        val beforeContractDate = fac.dosStart.exists(_ isAfter new DateTime(admitTstamp.getTime))
    if (enc.accountNumber.trim == "") {

      // MissingFin(enc).failureNel
      MissingFin(enc).failureAdt
    } else {
      //...
      -\/(enc.transactionID.toString).successNel  // this works
      -\/(enc.transactionID.toString).successAdt  // this also works

    }
  }
}

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.