Skip to content

Instantly share code, notes, and snippets.

@caente
Last active August 29, 2015 14:21
Show Gist options
  • Save caente/79a3f17fbfc5d3697f09 to your computer and use it in GitHub Desktop.
Save caente/79a3f17fbfc5d3697f09 to your computer and use it in GitHub Desktop.
object typesWrapped {
case class Divided( value: Int ) extends AnyVal
case class Subtracted( value: Int ) extends AnyVal
case class Multiplied( value: Int ) extends AnyVal
def divide( i: Int ): Divided = Divided( ( i / 5 ).toInt )
def subtract( i: Divided ): Subtracted = Subtracted( i.value - 10 )
def multiply( i: Subtracted ): Multiplied = Multiplied( i.value * -1 )
def allOK( i: Int ): Int = {
val s1 = divide( i )
val s2 = subtract( s1 )
val s3 = multiply( s2 )
s3.value
}
def allBAD( i: Int ): Int = {
val s1 = divide( i )
val s2 = multiply( s1 ) // this one doesn't compile
val s3 = subtract( s2 )
s3.value
}
}
/*
scala> :load typesWrapped.scala
Loading typesWrapped.scala...
<console>:28: error: type mismatch;
found : typesWrapped.Divided
required: typesWrapped.Subtracted
val s2 = multiply( s1 )
^
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment