(* CSE 341, Marty Stepp A signature represents a set of public members a structure can expose. It is similar to an interface in Java, combined with Java's "private" keyword. *) signature RATIONAL = sig (* abstract type declaration; says that there is a rational type, but doesn't describe how it is implemented *) type rational; exception TheRoof; (* function declarations (no bodies) *) val compare: rational * rational -> order; val new: int * int -> rational; val add: rational * rational -> rational; val toString: rational -> string; end;