When you're documenting a project so other people can use it, whether it's a library or web service, one important thing to do is to give people good examples to work with. Not only does this save people time trying to cobble together their first working program, but it's also a good way to show how the library is meant to be used, instead of just what's technically possible.

At my work, we've been using Core.Command and Async.Command to write the command-line interfaces to our programs. Historically we've used Command.Spec, which is now deprecated in favor of Command.Param. This post is documentation with examples for myself and the team for how to use the new interface for this module.

I recently finished a basic XLSX reader for OCaml and I thought it would be a good time to summarize what's necessary to make a library like this, since the documentation is complicated and sometimes hard to find.