Static typing is to a good programmer what a spell checker is to a good writer. – Peter Van Roy
We would never do this
def add(a: Any, b: Any) = ???
or would we 😉
def add(a, b):
# Adding two values the Python way
return a + b
We have chosen a typed language that enforces some restrictions at compile time
def add(a: Int, b: Int): Int = a + b
val foo: String = "foo"
add(foo, 2) // type error
I think we can all agree that this is a sane thing to do.
But can we do better?
case class Point(latitude: Double, longitude: Double)
which superficially seems good enough until
val lat = 42.0
val lng = -10.0
val point = Point(lng, lat)
def fireNukeAt(point: Point): Unit == ???
The compiler can't help us in this case