Integer Algebra

Semantics

//$ Integers.
class Integer[t] {
  inherit Tord[t];
  inherit Dring[t];
  inherit Bidirectional[t];
  virtual fun << : t * t -> t = "$1<<$2";
  virtual fun >> : t * t -> t = "$1>>$2";

  fun shl(x:t,y:t)=> x << y;
  fun shr(x:t,y:t)=> x >> y;

  virtual fun maxval: 1 -> t = "::std::numeric_limits<?1>::max()";
  virtual fun minval: 1 -> t = "::std::numeric_limits<?1>::min()";

}

//$ Signed Integers.
class Signed_integer[t] {
  inherit Integer[t];
  virtual fun sgn: t -> int;
  virtual fun abs: t -> t;
}

//$ Unsigned Integers.
class Unsigned_integer[t] {
  inherit Integer[t];
  inherit Bits[t];
}