Skip to content

Instantly share code, notes, and snippets.

@missingfaktor
Created September 11, 2017 16:39
Show Gist options
  • Select an option

  • Save missingfaktor/604a9bdc6b76d547a4c6e2ec72cbc57e to your computer and use it in GitHub Desktop.

Select an option

Save missingfaktor/604a9bdc6b76d547a4c6e2ec72cbc57e to your computer and use it in GitHub Desktop.
scala> trait Presence {
| type Apply[_]
| }
defined trait Presence
scala>
scala> trait Yes extends Presence {
| type Apply[A] = A
| }
defined trait Yes
scala>
scala> trait No extends Presence {
| type Apply[A] = Unit
| }
defined trait No
scala>
scala> trait Optional extends Presence {
| type Apply[A] = Option[A]
| }
defined trait Optional
scala>
scala> case class Blurb[AIsPresent <: Presence, BIsPresent <: Presence](a: AIsPresent#Apply[Int], b: BIsPresent#Apply[String])
defined class Blurb
scala> Blurb[Yes, Yes](2, "ola")
res1: Blurb[Yes,Yes] = Blurb(2,ola)
scala> Blurb[Yes, No](2, ())
res2: Blurb[Yes,No] = Blurb(2,())
scala> Blurb[Optional, No](Some(3), ())
res3: Blurb[Optional,No] = Blurb(Some(3),())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment