signature SIG1 = sig val i: int; type t; val x: t val y: t val f: t * t -> bool end; structure Struct1 = struct val i = 3; type t = int; val x = 4; val y = 5; fun f(a,b) = (a=b) end; structure Struct2: SIG1 = Struct1; structure Struct3:> SIG1 = Struct1;