The Interface specifies the objects that the module exports to the external world, while the implementation contains the join-calculus source for them. The string external-declaration is an Objective Caml expression that is the actual definition of name . The exact nature of what is bound to name depends on the type typexpr . It can either be a primitive, when typexpr is synchronous channel type, or some basic or external value otherwise. It is only used in the sys module from the standard library.
Parenthesis are optional when only one type variable ' ident is present.
This extra-information is used to generate automatic type coercions in calls of externals. It is in fact required for external modules written by users. Opening a module The expression open module-name in an interface does not specify any components. The scope of the open stops at the end of the interface file. The scope of the defined names extends to the end of the implementation file.