+// As ML_1, but the result is optional
+#define OML_1(cname, conv1, conv) \
+value ml_##cname (value arg1) { return Val_option_ptr((cname (conv1 (arg1))),conv); }
+// As ML_2, but the second argument is optional
+#define ML_2O(cname, conv1, conv2, conv) \
+value ml_##cname (value arg1, value arg2) \
+{ return conv (cname (conv1(arg1), ptr_val_option(arg2,conv2))); }
+