A compiler plugin that improves on the scala compiler on the assumption that the user is using the Scalazzi-safe subset of Scala.
- Sufficiency checker. Example.
- Non-ambigious typeclass resolution. Example.
- Orphan instance checker. Some examples.
- Polymorphic function optimization.
See test/files for more examples. We would like to get a lot more things done eventually, see open issues.
- No
null
. - No catching exceptions in pure code.
- No type casing (
isInstanceOf
). - No type casting (
asInstanceOf
). - No side-effects.
- No
equals
,toString
,hashCode
. - No
notify
orwait
in pure code. - No
.getClass
.
We are more interested in Scalazzi+, which adds:
- Only total functions.
Eq
(used in laws and pattern matching) must satisfy:- Identity of indiscernibles (indiscernible values are equal).
- Indiscernibility of identicals (equal values are indiscernible from each other).
The last requirement might seem a bit cryptic, but it has a wide range of implications, for example:
if (a === b) {
// now we know that a.type === b.type
}