sealed class Expr { class Const : Expr { val number: Double field = number get constructor(number: Double) /* primary */ { super/*Expr*/() /* () */ } } class Sum : Expr { val e1: Expr field = e1 get val e2: Expr field = e2 get constructor(e1: Expr, e2: Expr) /* primary */ { super/*Expr*/() /* () */ } } object NotANumber : Expr { private constructor() /* primary */ { super/*Expr*/() /* () */ } } protected constructor() /* primary */ { super/*Any*/() /* () */ } }