DuctileScala: Combined Static and Dynamic Feedback for Scala
Programmers receive feedback about program correctness in several ways. The most common static feedback is type-checking: if a program type-checks successfully, then all program executions are guaranteed to be free of certain classes of errors. Dynamic feedback is obtained by running a program and observing the output of a single program execution. Dynamically-typed programs can yield dynamic feedback at any time but are never able to provide meaningful static feedback, whereas statically-typed programs can only yield dynamic feedback (that is, be executed) after they properly type-check.