type Bool = class { declare unop ! -> Bool; declare binop &&(b Bool) -> Bool; declare binop ||(b Bool) -> Bool; }; type Int = class { declare unop + -> Int; declare unop - -> Int; declare binop ==(b Int) -> Bool; declare binop !=(b Int) -> Bool; declare binop >(b Int) -> Bool; declare binop <(b Int) -> Bool; declare binop >=(b Int) -> Bool; declare binop <=(b Int) -> Bool; declare binop +(b Int) -> Int; declare binop -(b Int) -> Int; declare binop *(b Int) -> Int; declare binop /(b Int) -> Int; declare binop %(b Int) -> Int; declare fn str() -> String; }; type String = class (data List[Char]) { }