Skip to content

Instantly share code, notes, and snippets.

@fedesilva
Forked from gclaramunt/planes.scala
Created June 6, 2012 18:22
Show Gist options
  • Save fedesilva/2883723 to your computer and use it in GitHub Desktop.
Save fedesilva/2883723 to your computer and use it in GitHub Desktop.
Very simple phantom types example
trait Flying
trait Landed
case class Plane[Status]()
def land(p:Plane[Flying])=Plane[Landed]()
def takeOff(p:Plane[Landed])= Plane[Flying]()
val plane = new Plane[Landed]()
/*
scala> val flying=takeOff(plane)
flying: Plane[Flying] = Plane()
scala> val landed=land(flying)
landed: Plane[Landed] = Plane()
scala> takeOff(flying)
<console>:15: error: type mismatch;
found : Plane[Flying]
required: Plane[Landed]
takeOff(flying)
^
scala> land(landed)
<console>:17: error: type mismatch;
found : Plane[Landed]
required: Plane[Flying]
land(landed)
^
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment