Browse thread
toplevel with pre-installed printers
-
Andrej Bauer
- Daniel_Bünzli
- Eric Stokes
- Jean-Christophe Filliatre
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Jean-Christophe Filliatre <filliatr@l...> |
| Subject: | Re: [Caml-list] toplevel with pre-installed printers |
Hello, Andrej Bauer writes: > This seems like a trivial question, but I do not know the answer: > how do I create either a toplevel (or a shell script which appears to be > a toplevel) with pre-installed pretty-printers (and pre-opened modules, > for that matter)? I learnt a trick to do that from David Monniaux's GMP interface. First define your pretty-printers using the Ocaml module Format. For instance, the GMP pretty-printers look like == gmp_pp.ml ========================================================= open Gmp open Format let z z = print_string (Z.string_from z) let q q = ... ====================================================================== then introduce another file installing the pretty-printers: == install_gmp_pp.ml ================================================= (* This is a hack to install the pretty-printers in the customized toplevel. *) (* Caml longidents. *) type t = | Lident of string | Ldot of t * string | Lapply of t * t let _ = Topdirs.dir_directory "+creal" let _ = Topdirs.dir_install_printer Format.std_formatter (Obj.magic (Ldot (Lident "Gmp_pp", "z")) : 'a) let _ = Topdirs.dir_install_printer Format.std_formatter (Obj.magic (Ldot (Lident "Gmp_pp", "q")) : 'a) ====================================================================== Finally, build your ocaml toplevel the usual way, linking the two files above: ====================================================================== ocamlgmp: gmp.cma gmp_pp.cmo install_gmp_pp.cmo ocamlmktop -custom -o $@ $^ ====================================================================== I know this is a hack (the infamous Obj.magic is used and the Caml longident type could change in a next ocaml version) but it works fine. Hope this helps, -- Jean-Christophe Filliâtre (http://www.lri.fr/~filliatr)