diff --git a/diagram.drawio b/diagram.drawio index 7049c98..ffd311a 100644 --- a/diagram.drawio +++ b/diagram.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/src/main/scala/mycats/examples/ValidatedExample.scala b/src/main/scala/mycats/examples/ValidatedExample.scala index 6d84ce7..ccada8b 100644 --- a/src/main/scala/mycats/examples/ValidatedExample.scala +++ b/src/main/scala/mycats/examples/ValidatedExample.scala @@ -1,15 +1,36 @@ package mycats.examples -import mycats.algebras.Validated +import mycats.algebras.{Invalid, Valid, Validated} +import mycats.examples.common.Expense +import mycats.examples.common.Utils.NonEmptyList import mycats.instances.ValidatedInstances.validatedApplicativeErrorInstance +import mycats.lib.obj.Semigroup +import mycats.lib.syntax.SemigroupalSyntax object ValidatedExample { - val validatedInstance = validatedApplicativeErrorInstance[Throwable,String] + type ValidatedNel[A] = Validated[NonEmptyList[String],A] + val validatedNelInstance = validatedApplicativeErrorInstance[NonEmptyList[String],Long] + implicit def semigroupOfNonEmptyList[A]:Semigroup[NonEmptyList[A]] = new Semigroup[NonEmptyList[A]] { + override def combine(x: NonEmptyList[A], y: NonEmptyList[A]): NonEmptyList[A] = x.appendedAll(y) + } + + + private def expenseIdValidation(expenseID:Long):ValidatedNel[Long]= + if(expenseID<=0) Invalid(List("Expense ID cannot be negative")) else Valid(expenseID) + + private def expenseAmountValidation(expenseAmount:Double):ValidatedNel[Double]= + if(expenseAmount<=0) Invalid(List("Expense amount cannot be negative")) else Valid(expenseAmount) + + private def mkExpense(id:Long,amount:Double):ValidatedNel[Expense] = { + val v1 = expenseIdValidation(id) + val v2 = expenseAmountValidation(amount) + + val product: Validated[NonEmptyList[String], (Long, Double)] = validatedNelInstance.product(v1,v2) + validatedNelInstance.map(product)((Expense.apply _).tupled) + + } def main(args: Array[String]): Unit = { - val valid:Validated[Throwable,String] = validatedInstance.pure("Any") - val invalid:Validated[Throwable,String] = validatedInstance.raiseError(new Throwable("Mem error")) - val fn :String=>String=_+"hellow world" - val invalidMap = validatedInstance.map[String,String](invalid)(fn) - print(invalidMap) + val valid = mkExpense(-1,-12.0) + print(valid) } } diff --git a/src/main/scala/mycats/examples/common/Utils.scala b/src/main/scala/mycats/examples/common/Utils.scala new file mode 100644 index 0000000..7185dc3 --- /dev/null +++ b/src/main/scala/mycats/examples/common/Utils.scala @@ -0,0 +1,8 @@ +package mycats.examples.common + + + + +object Utils{ + type NonEmptyList[A] = List[A] //Fake nonEmptyList +} \ No newline at end of file diff --git a/src/main/scala/mycats/instances/ValidatedInstances.scala b/src/main/scala/mycats/instances/ValidatedInstances.scala index e140d0f..c7dc04e 100644 --- a/src/main/scala/mycats/instances/ValidatedInstances.scala +++ b/src/main/scala/mycats/instances/ValidatedInstances.scala @@ -2,10 +2,11 @@ package mycats.instances import mycats.algebras.{Invalid, Valid, Validated} import mycats.lib.morphisms.bi.BiFunctor import mycats.lib.morphisms.error.ApplicativeError +import mycats.lib.obj.Semigroup object ValidatedInstances { - implicit def validatedApplicativeErrorInstance[E,A]= + implicit def validatedApplicativeErrorInstance[E,A](implicit semigroupOfE:Semigroup[E])= new ApplicativeError[({type Valid[C] = Validated[E, C]})#Valid,E] with BiFunctor[Validated]{ override def raiseError[A](e: E): Validated[E, A] = Invalid(e) override def handleErrorWith[A](fa: Validated[E, A])(f: E => Validated[E, A]): Validated[E, A] = fa match { @@ -23,10 +24,13 @@ object ValidatedInstances { case Valid(valid) => Valid(f(valid)) case p@Invalid(invalid)=>p } + //YEEEEEEE! override def ap[A, B](ff: Validated[E, A => B])(fa: Validated[E, A]): Validated[E, B] = (ff,fa) match { case (Valid(f),Valid(a))=>Valid(f(a)) + case (Invalid(err1),Invalid(err2))=>Invalid(semigroupOfE.combine(err1,err2)) case (Invalid(err),_)=>Invalid(err) case (_,Invalid(err))=>Invalid(err) + } } } diff --git a/~$diagram.drawio.bkp b/~$diagram.drawio.bkp index 10871f3..7049c98 100644 --- a/~$diagram.drawio.bkp +++ b/~$diagram.drawio.bkp @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file