; Gaussian integers type Gaussian { Gaussian Int Int } unGaussian : Gaussian -- Int Int =: [ { case | Gaussian -> } ] grp : a b c -- b a c =: [ dip(swap) ] ; perhaps unimpressive but I use this to test sizing add : Gaussian Gaussian -- Gaussian =: [ dip(unGaussian) unGaussian grp + dip(+) Gaussian ] conjugate : Gaussian -- Gaussian =: [ unGaussian ~ Gaussian ] %foreign kabi add %foreign kabi conjugate