 Nevertheless, while a C program decorated with appropriate checks will be in a sense as robust as the corresponding ML program, those checks will of necessity be dynamic; ML provides a set of static checks that give the programmer a high degree of confidence in the correctness of the program at compile time.Note that in object-oriented programming languages, such as Java, a disjoint union can be expressed by designing class hierarchies.However, as opposed to class hierarchies, ADTs are closed.