Skip to content

Instantly share code, notes, and snippets.

@juanpedromoreno
Created May 10, 2017 10:06
Show Gist options
  • Save juanpedromoreno/b506e17061d416141df72f3ddb4033d1 to your computer and use it in GitHub Desktop.
Save juanpedromoreno/b506e17061d416141df72f3ddb4033d1 to your computer and use it in GitHub Desktop.
Welcome Dinner LX Scala
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