判別共用体 (バリアント) は視覚的にわかりやすくていい感じ
という話を Scala 座の懇親会会場に行くエレベータの中でしました。
どういうことかというと、例えばある空想上の言語 (そう空想上の言語です) で
sealed abstract class Path case class File(name: String, file: java.io.File) extends Path case class Dir (name: String, file: java.io.File) extends Path
と書いたとして、これは視覚的には階層構造がよくわからない。
その点、判別共用体では
type Path = | File of string * FileInfo | Dir of string * DirectoryInfo
と、もうこれ UML いらないんじゃね?くらいわかりやすいです。
確かに上の空想上の言語は Java に比べて less typing なのですが、
case class Path | File(name: String, file: java.io.File) | Dir (name: String, file: java.io.File)
みたいに書ければもっと less typing(Path を繰り返さなくていい) なんですがね。あ、いや、あくまで空想上の言語の話です。