The package Batteries.Num overrides the functions (+), (-), ... So the compiler gives an error on the following simple code
open Batteries
open Num
let a = 4 + 4;;
File "a.ml", line 3, characters 8-9: Error: This expression has type int but an expression was expected of type Batteries.Num.num = Num.num
I compile with "ocamlfind ocamlc -package batteries a.ml".
EDIT: I know I could use Pervasives.(+) or just open Num locally.
But I am able to compile this program successfully with ocamlbuild with the simplest _tags file: <*>: pkg_batteries, package(batteries), package(num)
Where is the magic? How can I compile like ocamlbuild does with a Makefile?
EDIT: I found the solution. I actually had two versions of batteries (1.4 and 2.2), and ocamlfind gave the version 2.2 on command line, and 1.4 on ocamlbuild. I don't know why. I believe the early version of batteries didn't redefine the module Num (but you had to use BatNum), so the problem doesn't occur with the older version. Thanks for the answers.