Instantiating template for some types

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