Typical aliases are purely syntactic convenience - in some cases they can make the code cleaner or easier to refactor, but they provide no additional type security. For example, suppose I have code like this:
type DegreesC = Double
type DegreesF = Double
def c2f(c: DegreesC): DegreesF = (c * 9.0 / 5.0) + 32
, :
val currentTempInF = 62.0
c2f:
scala> c2f(currentTempInF)
res1: DegreesF = 143.6
case ( ):
case class DegreesC(value: Double) extends AnyVal
case class DegreesF(value: Double) extends AnyVal
def c2f(c: DegreesC): DegreesF = DegreesF((c.value * 9.0 / 5.0) + 32)
val currentTempInF = DegreesF(62.0)
:
scala> c2f(currentTempInF)
<console>:14: error: type mismatch;
found : DegreesF
required: DegreesC
c2f(currentTempInF)
^
, . , Scala , , , , , . , ( - ).