( ゚∀゚)o彡°O'PyCaml

  If you do not see a For-all sign at the first line, install unicode capable fonts.

What currently you can do:

  You can call some of Python/C API functions from OCaml.

How to install:

  Read INSTALL.txt

How to use:

  test.ml is for an example.

  - api.ml provides the main Python/OCaml interface. 
    Use "open Opycaml.Api" in your OCaml programs. 
    Once opened, Python/ML API functions are available by
    Py.<Class>.<function> names. For example,

       Py.Object.repr    for   PyObject_Repr
       Py.String.check   for   PyStrnig_Check 

    You can omit Py. prefix for the module names which do not collide
    with OCaml standard library name space:

       Object.repr       for   PyObject_Repr
       (String is in OCaml standard library, so no short cut is available.)

  - Do not forget calling Base.initialize for initialization.

  - autoapi.ml is auto-created by CamlIDL. It provides almost of 
    all the available API functions in OPyCaml. Their comments are
    from Python/C API reference, which are useful to understand them.

  - api.ml extends autoapi.ml, providing things not easily done by
    CamlIDL's code generator.

  - A C function Py<Hoo>_<Bar> is mapped into an ML function Hoo.bar, 
    where the first letter of "Bar" is lowercased.

    For example:
      PyObject_Repr =>  Object.repr
      PyString_Check => String.check   
               ( Note that String module is available by Py.String )

    There is one exception: If a C function has all-capital-or-underscore
    postfix name, such as PyTuple_GET_ITEM, its ML function name is not
    first letter lowercased but is prefixed by '_':

      PyTuple_GET_ITEM => Tuple._GET_ITEM

OO Interface

    OO style interface, OOApi.ml is now also provided. This module is automatically generated from api.ml.
    See examples/testoo.ml for how to use.

    - open Opycaml.OOApi at the beginning of your module

    - The Api function calls like [Api.M.func m args] are in OO style in OOApi, [m#func args], if [m]'s an object of [M].

    - If an Api function call [Api.M.func m args] has no trivial OO style translation, i.e. if [m] is not an object of [M], [OOApi.M.func] is available.
    - For example,

        open Opycaml.Api

        let _ = Base.initialize ()
        ... Dict.getItemString dict "foobar" ...

      becomes as follows in OO style:

        open Opycaml.OOApi

        let _ = Base.initialize ()           (* It has no trivial OO translation. *)
        ... dict#getItemString "foobar" ...  

Js_of_ocaml Interface

    If you have js_of_ocaml installed, there is a small tool to use the syntax sugar of js_of_ocaml for Python dictionary access in OPyCaml. See js_of_ocaml directory.