-
Make the entire library
-safe-string
compliant. This will involve introducing aBytes
module, removing all direct mutation on strings from theString
module, and "re-typing" string values that require mutation tobytes
. -
Do not export the
\*\_intf
modules from Base. Instead, any signatures should be exported by the.ml
and.mli
s. -
Only expose the first-class module interface of
Hashtbl
. Accompanying this should be cleanup ofHashtbl_intf
, moving anything that's still required in core_kernel to the appropriate files in that project. -
Replace
Hashtbl.create (module String) ()
by justHashtbl.create (module String)
-
Remove
replace
fromHashtbl_intf.Accessors
. -
Label one of the arguments of
Hashtbl_intf.merge_into
to indicate the flow of data. -
Merge
Hashtbl_intf.Key_common
andHashtbl_intf.Key_plain
. -
Use
Either.t
as the return value forMap.partition
. -
Rename
Monad_intf.all_ignore
toMonad_intf.all_unit
. -
Eliminate all uses of
Not_found
, replacing them with descriptive error messages. -
Move the various private modules to
Base.Base_private
instead ofBase.Exported_for_specific_uses
andBase.Not_exposed_properly
-
Use
compare
rather thancmp
as the label for comparison functions throughout.
-
Remove
ignore
and(=)
fromSexp_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. -
Delete the
Hashable
toplevel module. This is a vestige of the previousMap
andSet
implementations and is no longer needed. -
Ensure that
Map
operations that are effective NO-OPs return the sameMap.t
they were provided. Candidate operations include e.gadd
,remove
,filter
. -
Simplify the implementation of
Option.value_exn
, if possible. -
Eliminate all instances of
open! Polymorphic_compare
-
Refactor common blit code in
String.replace_all
andString.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 declaration -
Put all the exported private modules from
Base.Exported_for_specific_uses
andBase.Not_exposed_properly
inBase.Base_private
-
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 inComparable_intf
-
hashtbl_of_sexp
shouldn't live in Base.Sexp_conv since we have our own hash tables. Move it to sexplib
-
In
Hash_set.diff
, use the size of each set to determine which to iterate over. -
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. Seebench/bench_int.ml
for examples. -
Optimize
Lazy.compare
by performing aphys_equal
check before forcing the lazy value. Note that this will also change the semantics ofcompare
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
- Make the various comparison functions return an
Ordering.t
instead of anint
.