# Stable Interface (v1.0)
- [X] Make the entire library `-safe-string` compliant. This will involve
introducing a `Bytes` module, removing all direct mutation on strings from
the `String` module, and "re-typing" string values that require mutation to
- [X] Do not export the `\*\_intf` modules from Base. Instead, any signatures
should be exported by the `.ml` and `.mli`s.
- [X] Only expose the first-class module interface of `Hashtbl`. Accompanying
this should be cleanup of `Hashtbl_intf`, moving anything that's still
required in core_kernel to the appropriate files in that project.
- [X] Replace `Hashtbl.create (module String) ()` by just
`Hashtbl.create (module String)`
- [X] Remove `replace` from `Hashtbl_intf.Accessors`.
- [X] Label one of the arguments of `Hashtbl_intf.merge_into` to indicate the
flow of data.
- [X] Merge `Hashtbl_intf.Key_common` and `Hashtbl_intf.Key_plain`.
- [X] Use `Either.t` as the return value for `Map.partition`.
- [X] Rename `Monad_intf.all_ignore` to `Monad_intf.all_unit`.
- [ ] Eliminate all uses of `Not_found`, replacing them with descriptive error messages.
- [X] Move the various private modules to `Base.Base_private`
instead of `Base.Exported_for_specific_uses` and `Base.Not_exposed_properly`
- [X] Use `compare` rather than `cmp` as the label for comparison functions
# Implementation Cleanup
- [ ] Remove `ignore` and `(=)` from `Sexp_conv`'s public interface. These
values are hidden from the documentation so their removal won't be
considered a breaking API change.
- [ ] Do not expose the type equality `Int63_emul.W.t = int64`.
- [ ] Replace the exception thrown by `Float.of_string` with a named
exception that's more descriptive.
- [X] Delete the `Hashable` toplevel module. This is a vestige of the previous
`Map` and `Set` implementations and is no longer needed.
- [ ] Ensure that `Map` operations that are effective NO-OPs return the same
`Map.t` they were provided. Candidate operations include e.g `add`, `remove`,
- [ ] Simplify the implementation of `Option.value_exn`, if possible.
- [ ] Eliminate all instances of `open! Polymorphic_compare`
- [ ] Refactor common blit code in `String.replace_all` and `String.replace_first`.
- [ ] Delete unused function aliases in `Import0`
- [ ] Put `Sexp_conv.Exn_converter` into its own file, with only an
alias in Sexp_conv, so that it doesn't get pulled unless used
- [ ] Create a file with all the basic types and their associated
combinators (`sexp_of_t`, `compare`, `hash`), and expose the
- [ ] Put all the exported private modules from
`Base.Exported_for_specific_uses` and `Base.Not_exposed_properly`
- [ ] Decide on a better name for `Polymorphic_compare`.
`Polymorphic_compare_intf` contains interface for comparison
of non-polymorphic types, which is weird. Get rid of it and
inline things in `Comparable_intf`
- [X] `hashtbl_of_sexp` shouldn't live in Base.Sexp_conv since we
have our own hash tables. Move it to sexplib
# Performance Improvements
- [ ] In `Hash_set.diff`, use the size of each set to determine which to iterate
- [ ] Ensure that the correct `compare` function and other related functions are
exported by all modules. These functions should not be derived from
a functor application, in order to ensure proper inlining. Implementing
this change should also include benchmarks to verify the initial result,
and to maintain it on an ongoing basis. See `bench/bench_int.ml` for
- [X] Optimize `Lazy.compare` by performing a `phys_equal` check before
forcing the lazy value. Note that this will also change the semantics of
`compare` and should be documented and rolled out with care.
- [ ] Conduct a thorough performance review of the `Sequence` module.
- [ ] Consolidate documentation the interface and implementation files
related to the `Hash` module.
- [ ] Add documentation to the `Ref` toplevel module.
- [ ] Document properly how `String.unescape_gen` handles malformed strings
# Changes For The Distant Future
- [ ] Make the various comparison functions return an `Ordering.t`
instead of an `int`.