type Bool = {
  native unop ! Bool;

  native binop ||[Bool] Bool;
  native binop &&[Bool] Bool;
};

type Byte = {};

type Int = {
  native unop + Int;
  native unop - Int;
  native unop ~ Int;

  native binop ==[Int] Bool;
  native binop !=[Int] Bool;
  native binop >[Int] Bool;
  native binop <[Int] Bool;
  native binop >=[Int] Bool;
  native binop <=[Int] Bool;

  native binop <<[Int] Int;
  native binop >>[Int] Int;
  native binop |[Int] Int;
  native binop &[Int] Int;

  native binop +[Int] Int;
  native binop -[Int] Int;
  native binop *[Int] Int;
  native binop /[Int] Int;
  native binop %[Int] Int;

  fn str[] String; 
};

type Float = {

};
