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))
^