To instantiate a template over not one but some types, follow these examples.
implement (n:int) gprint_val<string1 n> (str) =
gprint_val<string> (g0ofg1 str)
implement (a:t@ype, b:t@ype) gcompare_val_val<@(a,b)> (x, y) =
let val c = gcompare_val_val<a> (x.0, y.0)
in
if c != 0
then c
else gcompare_val_val<b> (x.1, y.1)
end