I am experimenting with Core\'s List.fold_left
.
# List.fold_left;;
- : \'a Core.Std.List.t -> init:\'b -> f:(\'b -> \'a -> \'b) -> \'
@sepp2k's answer clearly explains what is happening here. Let me add one more thing.
Simply, do NOT omit labels of labeled functions. They are there for purposes. I believe no one can handle label omittion always correctly. You should always turn the warning 6 on and make it an error:
$ ocamlc -w +6 -warn-error +6 file.ml
File "file.ml", line 2, characters 17-18:
Warning 6: labels were omitted in the application of this function.
File "file.ml", line 1:
Error: Some fatal warnings were triggered (1 occurrences)
According to the manual you may only omit labels "if an application is total (omitting all optional arguments)" with the important caveat "that functions like ListLabels.fold_left
whose result type is a type variable will never be considered as totally applied."
So since core's fold_left
's result type is, of course, also a type variable, you can not call it without labels. What happens when you do is that the positional arguments are interpreted as arguments to the function produced by fold_left
and it still waits for you to provide the labeled arguments.