#line 12 "/home/travis/build/felix-lang/felix/src/packages/numbers.fdoc"
  
  instance[t in numbers] FloatAddgrp[t] {
    fun zero: unit -> t = "(?1)0" ;
    fun + : t * t -> t = "$1+$2" ;
    fun neg : t -> t = "-$1" ;
    fun - : t * t -> t = "$1-$2" ;
    proc += : &t * t = "*$1+=$2;";
    proc -= : &t * t = "*$1-=$2;";
  }
  
  instance[t in numbers] FloatMultSemi1[t] {
    fun one: unit -> t = "(?1)1";
    fun * : t * t -> t = "$1*$2";
    proc *= : &t * t = "*$1*=$2;";
  }
  
  instance[t in numbers] FloatRing[t] {}
  instance[t in ints \(\cup\) complexes] FloatDring[t] {
    fun / : t * t -> t = "$1/$2";
    fun % : t * t -> t = "$1%$2";
    proc /= : &t * t = "*$1/=$2;";
    proc %= : &t * t = "*$1%=$2;";
  }
  instance[t in floats] FloatDring[t] {
    fun / : t * t -> t = "$1/$2";
    fun % : t * t -> t = "fmod($1,$2)";
    proc /= : &t * t = "*$1/=$2;";
    proc %= : &t * t = "*$1=fmod($1,$2);";
  }