Resources for Learning CamlP4

For an accessible introduction to modern (>= 3.10) Camlp4, you may be interested in Jake Donham’s blog post series “Reading Camlp4” : http://ambassadortothecomputers.blogspot.com/search/label/camlp4
You will also find valuable (though incomplete) information on the camlp4 wiki : http://brion.inria.fr/gallium/index.php/Camlp4
The older version of camlp4 (< 3.10, now called camlp5) also provides a documentation http://caml.inria.fr/pub/docs/tutorial-camlp4/index.html , and you can also use to Martin Jambon’s tutorial
http://martin.jambon.free.fr/extend-ocaml-syntax.html (for the older camlp4).

— bluestorm

You can also see the articles in sequence at
http://ambassadortothecomputers.blogspot.com/p/reading-camlp4.html

which I recommend since later articles depend on earlier material.

— Jake Donham

Shameless self-plug, but I wrote a blog post this summer about my experience figuring out how to do it. I provide a walk-through and explanation of a minimal syntax extension which adds lazy list pattern matching support based on Batteries. The URL:
http://www.elehack.net/michael/blog/2010/06/ocaml-syntax-extension
I do assume a basic knowledge of parsing context-free grammars, but a generic tutorial on parsing with a tool such as Yacc can fill in that gap. The Wikipedia article[1] may also be helpful.
Once you’ve lept the hurdle of figuring out what pieces you need to write and build a syntax extension, the remaining tricky part is to figure out what pieces of the grammar you need to extend to accomplish your objective. For that, I consult the definition of the OCaml parser in Camlp4OCamlParser.ml in the OCaml source tree.
1. http://en.wikipedia.org/wiki/Context-free_grammar

— Michael Ekstrand

If you consider yourself as a n00b, don’t start by camlp4. This is probably the most difficult part of OCaml — and to program camlp4 you need to use OCaml standard syntax (or revised syntax, it depends if you
use antiquotations).
If you still want to follow the hard path, as suggested elsewhere, Jake Donham’s blog posts are very good:
http://ambassadortothecomputers.blogspot.com/p/reading-camlp4.html
Or if you are around, there is a tutorial session at CUFP:
http://cufp.org/conference/sessions/2010/camlp4-and-template-haskell.
(but you need to subscribe).

— Sylvain Le Gall
(via Caml-list)

DrScheme Style Buffer Evaluation for OCaml in Emacs

When you want to evaluate code inside of DrScheme, you hit the F5 key and the entire editor buffer gets evaluated inside of a new REPL. Unlike Emacs, the ability to send the current expression, region, or buffer to the REPL isn’t available. It might sound constricting, but in practice it is very nice because you are always working with the most up-to-date versions of your definitions. It might sound slow to start a new REPL on each run, but it isn’t; on my older desktop the new REPL comes up before my finger even comes off of the F5 key. This approach seemed like a nice to have for working with OCaml in Tuareg mode on Emacs, so I pieced together a function to do so against Tuareg 1.45.6:

(defun tuareg-eval-buffer-drscheme-style ()
  "Send the buffer to a brand new Tuareg Interactive process."
  (interactive)
  (tuareg-kill-caml)
  (sleep-for 0.25)
  (if (get-buffer tuareg-interactive-buffer-name)
      (kill-buffer tuareg-interactive-buffer-name))
  (tuareg-eval-buffer)
  (switch-to-buffer tuareg-interactive-buffer-name))

Out of the box Tuareg mode will ask you what program name to run to start OCaml each and every time you evaluate the buffer, even when the variable storing that name is defined. I didn’t find a way to avoid this prompt so I patched Tuareg such that it will not ask you if a value is already defined for the program name. Here is the patch.
Thus far it has been nice to have the option of evaluating the whole buffer in a new REPL in addition to the existing incremental evaluation options.