Object {
  to_s : unit -> String
}

String {
  + : String -> String
  == : String -> Boolean
  === : String -> Boolean
}

Numeric {
  + : Numeric -> Numeric
  - : Numeric -> Numeric
  * : Numeric -> Numeric
  / : Numeric -> Numeric
  to_s : unit -> String
}

Integer {
  + : Numeric -> Numeric
  - : Numeric -> Numeric
  * : Numeric -> Numeric
  / : Numeric -> Numeric
  to_s : unit -> String
}

Float {
  + : Numeric -> Numeric
  - : Numeric -> Numeric
  * : Numeric -> Numeric
  / : Numeric -> Numeric
  to_s : unit -> String
}

Class {
  new : unit -> Object
  superclass : Class -> Class
}

TrueClass {
  & : Boolean -> Boolean
  ^ : Boolean -> Boolean
  | : Boolean -> Boolean
}

FalseClass {
  & : Boolean -> Boolean
  ^ : Boolean -> Boolean
  | : Boolean -> Boolean
}

Boolean {
  & : Boolean -> Boolean
  ^ : Boolean -> Boolean
  | : Boolean -> Boolean
}
