Le Saturday 03 Sep 2011 à 11:53:30 (+0200), Goswin von Brederlow a écrit :
> Hi,
>
> I'm implementing a solver for the game Atomix. If you don't know it then
> don't worry. It isn't relevant.
>
> I split things up into submodules and now one of the submodules does not
> infere the right types:
>
> File "Atomix.ml", line 168, characters 11-876:
> Error: The type of this module,
> sig
> type dir = NORTH | SOUTH | WEST | EAST
> val max_moves : int
> val cache : (string, unit) Hashtbl.t
> val states :
> ('_a list * (char * int * int) array * string) list array
> val string_of_dir : dir -> string
> val print :
> (int * int * dir) list * (char * int * int) array * string -> unit
> val num_states : int
> end, contains type variables that cannot be generalized
>
> I believe this is wrong. In S.num_states the call to "print state"
> fixates the type for state and the "states.(d) <- state::states.(d);"
> should then fixate the missing '_a in the type for states.
>
> Anyone know why?
It also seems quite wrong to me. You should perhaps file a bug into
Mantis if no typing expert answers.
Did you try adding type annotations one at a time near the call to print
and the states.(d) assignment in your anonymous List.fold-ing function?
To check precisely what the type inferencer gets right and what it gets
wrong?
I'd be curious to know whether annotating state in "states.(d) <-
state::states.(d)" solves your problem. Since it's here that the '_a in
the type of states should be fixated.
--
Guillaume Yziquel
--
Caml-list mailing list. Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs