What is a Singleton Type exactly?

If you think of a type as a set of values, the singleton type of a value x is the type which only contains this value ({x}). Usage examples:

  1. Pattern matching: case _: Foo.type checks that the matched object is the same as Foo using eq, where case Foo only checks that it’s equal to Foo using equals.

  2. It’s needed to write down the type of an object (as a type parameter, an argument, etc.):

    object A
    def method(): A.type = A
    
  3. To guarantee the return value of a method is the object it’s called on (useful for method chaining, example from here):

    class A { def method1: this.type = { ...; this } }
    class B extends A { def method2: this.type = { ...; this } }
    

    You can now call new B.method1.method2, which you couldn’t without this.type because method1 would return A.

Leave a Comment