I think that's because i is being unified with int64 type in the seek_in call. So the type of i will be int64, and input_value polymorphic type variable will be int64.
The unused binding j is not taken account and thrown away, so the type system will not take into account + operator that will cause i to be int.
Why the unused binding is being thrown away before type checker, I don't know, maybe somebody could explain possibly.
So from this is obvious why the second statement fails to type check.
Cheers;
Wojciech
Perhaps someone could explain why following behaves the way it does:
~$ ocaml
Objective Caml version 3.11.2
# let f ic = let i = input_value ic in let j = i + 1 in LargeFile.seek_in ic i;;
Warning Y: unused variable j.
val f : in_channel -> unit = <fun>
# let f ic = let i = input_value ic in let j = i + 1 in LargeFile.seek_in ic j;;
Error: This expression has type int but an expression was expected of type
int64
--
mailto:av1474@comtv.ru
--
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