(* the signature is restricting the types of the concreteFunction structure *) signature int_bool_function = sig val f1 : int * bool list -> (int * bool) list end; structure abstractFunction = struct fun f1 (i, nil) = nil | f1 (i, c::cs) = (i, c) :: f1(i, cs); end; structure concreteFunction:int_bool_function = abstractFunction;