scala> // Recommended / Best practice : Try to create domain scala> // specific types in order to avoid type scala> // monoculture #255 scala> scala> /////////////////////////////////////////// scala> // A method call using Basic Value Classes scala> ////////////////////////////////////////// scala> def divide(numerator: Int, denominator: Int) : Int = { | numerator / denominator | } divide: (numerator: Int, denominator: Int)Int scala> scala> divide(10, 5) res58: Int = 2 scala> divide(5, 10) res59: Int = 0 scala> scala> /////////////////////////////////////////// scala> // A method call using Custom Value Classes scala> ////////////////////////////////////////// scala> scala> class Numerator(val num:Int) extends AnyVal defined class Numerator scala> class Denominator(val num:Int) extends AnyVal defined class Denominator scala> scala> def divide(numerator: Numerator, denominator:Denominator) = { | numerator.num / denominator.num | } divide: (numerator: Numerator, denominator: Denominator)Int scala> scala> divide(new Numerator(10), new Denominator(5)) res60: Int = 2 scala> divide(new Denominator(10), new Numerator(5)) <console>:46: error: type mismatch; found : Denominator required: Numerator divide(new Denominator(10), new Numerator(5)) ^