A short talk about using type providers for fun and profit. (well, mostly fun).
The talk was delivered at Underscore, the Israeli Scala user group.
Video:
http://parleys.com/play/530e2217e4b06b7f61f3fc06
1) Mixfix notation:
going from
@syntax def _inThe_withThe_(...) = ...
to
(ColonelMustard inThe LoungeRoom withThe LeadPipe)
GitHub: https://github.com/hunam/scala-mixfix
2) Use adjectives to describe your objects:
going from
Book(length = long, interesting = true, color = red)
to
a (long, interesting, red) Book
GitHub: https://github.com/hunam/scala-adjectives
4. The Suspects
sealed trait Suspect
case object MissScarlet extends Suspect
case object ColonelMustard extends Suspect
case object MrsWhite extends Suspect
case object ReverendGreen extends Suspect
case object MrsPeacock extends Suspect
case object ProfessorPlum extends Suspect
5. sealed trait Weapon
case object Candlestick extends Weapon
case object Dagger extends Weapon
case object LeadPipe extends Weapon
case object Revolver extends Weapon
case object Rope extends Weapon
case object Wrench extends Weapon
The
Weapons
6. The Rooms
sealed trait Room
case object Kitchen extends Room
case object Ballroom extends Room
case object Conservatory extends Room
case object DiningRoom extends Room
case object BilliardRoom extends Room
case object Library extends Room
case object Lounge extends Room
case object Hall extends Room
case object Study extends Room
26. The challenge
Getting from:
case class Book(
interesting: Boolean = false,
length: Length = short,
color: Color = red)
Book(true, short, red)
To:
an (interesting, long, red) Book
27. mkAdjectives extracts adjectives
object Book {
val adjectives = Adjectives.mkAdjectives[Book]
}
import Book.adjectives._
!
println(an (interesting, long, red) Book)
!
Literate initialization for finite fields:
boolean, enumeration, case objects
Inspired by E