It is a strict functional programming language of ML family, supporting also imperative programming. It features first class modules (Modules as values), polymorphic typing with type inference, generalized algebraic data types and has a pretty wide set of libraries and tools. Also, it is simple and fast, with a quite succinct expressive syntax. The code can be compiled to bytecode, to machine code, or it can be used like a scripting language with direct compilation to byte code.
Given that Ocaml can be used to create share libraries [L3 ], just like C, it should not be that difficult to use with Tcl - in the classic Tcl as glue for another language fashion.
schlenk It is not too difficult to wrap an OCaml library as a Tcl extension, but there are some small issue one has to be aware off.
* The library should be created as native code, not OCaml Bytecode. * When trying to bridge OCaml Objects to Tcl_Obj representations on needs to be aware of differences like the CAR/CON semantics of OCaml lists vs. the C array style reps of Tcl_ListObj, so you need to study the boxing/unboxing of OCaml Values to make it work, e.g. recursive creation of OCaml lists from Tcl_ListObj. Its easier to work via the String interfaces.
NML is a dynamically typed functional language. It supports overloaded, vectorized, math operations, list comprehensions, and optional and keyword arguments in uncurried argument tuples, possibly with specified default values. It includes a Tcl/Tk interactive browser and interaction window with list pane access to a user modifiable documentation database.
NML compiles its source code to fast closures of native OCaml code.