[isabelle-dev] ADTs in Scala
makarius at sketis.net
Thu Apr 12 21:14:31 CEST 2012
some year ago, I've complained about the lack of good old abstract
datatypes in Scala. Some of the reactions were that I was asking for
wrong things in an "object-oriented" environment, pointing to classic
literature about that.
In the meantime, I've managed to do it in a reasonably simple way, e.g.
// public operations to create ADT instances
final class Graph[Key, A] private(rep: SortedMap[Key, (A, (SortedSet[Key], SortedSet[Key]))])
// implementation with access to rep
The main thing is the "private" in this odd position, which is Odersky's
way to make the constructor private, but the keep the type itself public.
This detail seems to have been forgotten in Java -- in fact in a recent
talk some Java guru admitted that -- which was also my starting point to
google for "private constructor" to find the above solution.
Moreover, the "final" prevents unexpected behaviour from class extensions.
It is a concession to the remaining ooddities of the platform.
Now after 25 years we are almost as concise as ancient abstype in ML :-)
Next inappropriate question for Scala: How to avoid the ubiquitious NPE
problem of the JVM?
More information about the isabelle-dev