Esempio di Either Monad
This commit is contained in:
27
scala/src/main/scala/org/gym/fp/BooleanResult.scala
Normal file
27
scala/src/main/scala/org/gym/fp/BooleanResult.scala
Normal file
@@ -0,0 +1,27 @@
|
||||
package org.gym.fp
|
||||
|
||||
// data type
|
||||
sealed trait BooleanResult[+A] {
|
||||
|
||||
def map[B](f: A => B): BooleanResult[B]
|
||||
|
||||
def flatMap[B](f: A => BooleanResult[B]): BooleanResult[B]
|
||||
|
||||
}
|
||||
|
||||
// data constructor
|
||||
case class TrueResult[A](value: A) extends BooleanResult[A] {
|
||||
|
||||
override def map[B](f: A => B): BooleanResult[B] = TrueResult(f(value))
|
||||
|
||||
override def flatMap[B](f: A => BooleanResult[B]): BooleanResult[B] = f(value)
|
||||
|
||||
}
|
||||
|
||||
case class FalseResult[A]() extends BooleanResult[A] {
|
||||
|
||||
override def map[B](f: A => B): BooleanResult[B] = FalseResult()
|
||||
|
||||
override def flatMap[B](f: A => BooleanResult[B]): BooleanResult[B] = FalseResult()
|
||||
|
||||
}
|
||||
22
scala/src/main/scala/org/gym/fp/EitherExample.scala
Normal file
22
scala/src/main/scala/org/gym/fp/EitherExample.scala
Normal file
@@ -0,0 +1,22 @@
|
||||
package org.gym.fp
|
||||
|
||||
case class Failed(msg: String)
|
||||
|
||||
object EitherExample extends App {
|
||||
|
||||
println(giveMeAnAnswer(divideXByY(1, 0)))
|
||||
println(giveMeAnAnswer(divideXByY(1, 1)))
|
||||
|
||||
def divideXByY(x: Int, y: Int): Either[String, Int] = {
|
||||
if (y == 0) Left("Dude, can't divide by 0") else Right(x / y)
|
||||
}
|
||||
|
||||
private def giveMeAnAnswer(question: Either[String, Int]): String = {
|
||||
question match {
|
||||
case Left(value) => "Answer: " + value
|
||||
case Right(value) => "Answer: " + value
|
||||
case _ => "I don't known"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user