On Tue, Nov 07, 2017 at 03:16:31PM +0100, Pino Toscano wrote:
On Sunday, 8 October 2017 23:26:53 CET Richard W.M. Jones wrote:
> We defined a number of functions on lists which are not provided by
> the standard library. As with Char and String, let's extend List to
> add these new functions to a List pseudo-module (really
> Std_utils.List, but called List when you ‘open Std_utils’).
>
> The initial exported functions are all List functions from OCaml 3.11
> + iteri + mapi. We can add other functions as needed.
> ---
My worry about this is that:
- OCaml does not have OOTB support for conditional code depending on the
version
- the interface of the List module would get "frozen" this way, and
overrides the module in the standard library
then we could run into issues like commit
7cd27531154dd25d9093cf04c085a3669bc834e5, i.e. restricting the interface
because of compatibility issues.
This commit stopped a symbol from being exported which didn't exist in
whatever minimum version of OCaml we were supporting at the time (3.11
I think).
It didn't restrict what we could do:
* If we wanted to stay with [whatever minimum version of OCaml] then
we would have had to reimplement ‘StringSet.map’.
* It didn't stop us from reimplementing ‘StringSet.map’ if we had
needed it.
* We could move to a new minimum version of OCaml and add newer
functions to Char, String and List.
Also IMHO this makes more difficult to know what's stdlib and
what's
ours, when using the API -- I guess I mentioned that when String was
introduced, maybe...
Plainly it is true that from just reading the code you can't easily
tell that ‘List.map’ is really ‘Std_utils.List.map’. (In emacs you
can use ‘M-x caml-types-show-ident’ to show the true name.)
But I think it's good that we can add new functions under the Char,
String and List modules. It's also a fairly common technique. Most
notably it was used by ExtLib[1] for the last 14 years.
Rich.
[1]
https://github.com/ygrek/ocaml-extlib/blob/41951de2ce604c6fc0bf72a86f77d6...
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/