Created
May 10, 2017 10:06
-
-
Save juanpedromoreno/b506e17061d416141df72f3ddb4033d1 to your computer and use it in GitHub Desktop.
Welcome Dinner LX Scala
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cats.implicits._ | |
object menu { | |
sealed trait Starters | |
case object LeakCreamedSoup extends Starters | |
case object Salads extends Starters | |
sealed trait MixedSalads | |
case object Niçoise extends MixedSalads | |
case object `Celery with Apple` extends MixedSalads | |
case object `Pasta with Ratatouille` extends MixedSalads | |
case object `Potatoes with Bacon` extends MixedSalads | |
sealed trait ColdPlatters | |
case object DeliMeats extends ColdPlatters | |
case object SmokedSalmon extends ColdPlatters | |
case object CookedShrimps extends ColdPlatters | |
sealed trait HotDishes | |
case object BacalhauCondeDaGuarda extends HotDishes | |
case object `BlackPorkCheeks with Clams` extends HotDishes | |
case object VegetablesLasagna extends HotDishes | |
trait Drinks | |
case object Water extends Drinks | |
case class SoftDrinks(disapprovedByWorldHealthOrg: Boolean = true) | |
extends Drinks | |
case object Beer extends Drinks | |
case object Wine extends Drinks | |
trait Desserts | |
case object Brigadeiro extends Desserts | |
case object Farófias extends Desserts | |
case object RicePudding extends Desserts | |
case object TrouxasDeOvos extends Desserts | |
} | |
object dinner { | |
import menu._ | |
val starters = Vector(LeakCreamedSoup, Salads) | |
val mixedSalads = Vector(Niçoise, | |
`Celery with Apple`, | |
`Pasta with Ratatouille`, | |
`Potatoes with Bacon`) | |
val coldPlatters = Vector(DeliMeats, SmokedSalmon, CookedShrimps) | |
val hotDishes = Vector(BacalhauCondeDaGuarda, | |
`BlackPorkCheeks with Clams`, | |
VegetablesLasagna) | |
val drinks = Vector(Water, SoftDrinks(), Beer, Wine) | |
val desserts = Vector(Brigadeiro, Farófias, RicePudding, TrouxasDeOvos) | |
val choices = | |
(starters |@| mixedSalads |@| coldPlatters |@| hotDishes |@| drinks |@| desserts).tupled | |
val yourChoice = scala.util.Random.nextInt(choices.length) | |
def `enjoy!` = s"yami yami ${choices.take(yourChoice)}" | |
} | |
println(dinner.`enjoy!`) | |
// You can also run this code at https://scastie.scala-lang.org/juanpedromoreno/AvhxrjsfQZugzB1T9njfOw/1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment