moonpool/dev/ocaml/Misc/index.html
2023-08-28 17:11:38 +00:00

37 lines
No EOL
34 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Misc (ocaml.Misc)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Misc</nav><header class="odoc-preamble"><h1>Module <code><span>Misc</span></code></h1><p>Miscellaneous useful types and functions</p><p><b>Warning:</b> this module is unstable and part of <span class="xref-unresolved">compiler-libs</span>.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-fatal_error"><a href="#val-fatal_error" class="anchor"></a><code><span><span class="keyword">val</span> fatal_error : <span>string <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fatal_errorf"><a href="#val-fatal_errorf" class="anchor"></a><code><span><span class="keyword">val</span> fatal_errorf : <span><span><span>(<span class="type-var">'a</span>, <a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a>, unit, <span class="type-var">'b</span>)</span> <a href="../Stdlib/index.html#type-format4">format4</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Fatal_error"><a href="#exception-Fatal_error" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Fatal_error</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-try_finally"><a href="#val-try_finally" class="anchor"></a><code><span><span class="keyword">val</span> try_finally :
<span>?always:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span>?exceptionally:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>try_finally work ~always ~exceptionally</code> is designed to run code in <code>work</code> that may fail with an exception, and has two kind of cleanup routines: <code>always</code>, that must be run after any execution of the function (typically, freeing system resources), and <code>exceptionally</code>, that should be run only if <code>work</code> or <code>always</code> failed with an exception (typically, undoing user-visible state changes that would only make sense if the function completes correctly). For example:</p><pre class="language-ocaml"><code>let objfile = outputprefix ^ &quot;.cmo&quot; in
let oc = open_out_bin objfile in
Misc.try_finally
(fun () -&gt;
bytecode
++ Timings.(accumulate_time (Generate sourcefile))
(Emitcode.to_file oc modulename objfile);
Warnings.check_fatal ())
~always:(fun () -&gt; close_out oc)
~exceptionally:(fun _exn -&gt; remove_file objfile);</code></pre><p>If <code>exceptionally</code> fail with an exception, it is propagated as usual.</p><p>If <code>always</code> or <code>exceptionally</code> use exceptions internally for control-flow but do not raise, then <code>try_finally</code> is careful to preserve any exception backtrace coming from <code>work</code> or <code>always</code> for easier debugging.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-reraise_preserving_backtrace"><a href="#val-reraise_preserving_backtrace" class="anchor"></a><code><span><span class="keyword">val</span> reraise_preserving_backtrace : <span>exn <span class="arrow">&#45;&gt;</span></span> <span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>reraise_preserving_backtrace e f</code> is (f (); raise e) except that the current backtrace is preserved, even if <code>f</code> uses exceptions internally.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map_end"><a href="#val-map_end" class="anchor"></a><code><span><span class="keyword">val</span> map_end : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> list</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map_left_right"><a href="#val-map_left_right" class="anchor"></a><code><span><span class="keyword">val</span> map_left_right : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> list</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-for_all2"><a href="#val-for_all2" class="anchor"></a><code><span><span class="keyword">val</span> for_all2 : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> bool)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> list</span> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-replicate_list"><a href="#val-replicate_list" class="anchor"></a><code><span><span class="keyword">val</span> replicate_list : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> list</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-list_remove"><a href="#val-list_remove" class="anchor"></a><code><span><span class="keyword">val</span> list_remove : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> list</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-split_last"><a href="#val-split_last" class="anchor"></a><code><span><span class="keyword">val</span> split_last : <span><span><span class="type-var">'a</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> list</span> * <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-ref_and_value"><a href="#type-ref_and_value" class="anchor"></a><code><span><span class="keyword">type</span> ref_and_value</span><span> = </span></code><ol><li id="type-ref_and_value.R" class="def variant constructor anchored"><a href="#type-ref_and_value.R" class="anchor"></a><code><span>| </span><span><span class="constructor">R</span> : <span><span class="type-var">'a</span> <a href="../Stdlib/index.html#type-ref">ref</a></span> * <span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span> <a href="#type-ref_and_value">ref_and_value</a></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-protect_refs"><a href="#val-protect_refs" class="anchor"></a><code><span><span class="keyword">val</span> protect_refs : <span><span><a href="#type-ref_and_value">ref_and_value</a> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>protect_refs l f</code> temporarily sets <code>r</code> to <code>v</code> for each <code>R (r, v)</code> in <code>l</code> while executing <code>f</code>. The previous contents of the references is restored even if <code>f</code> raises an exception, without altering the exception backtrace.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Stdlib"><a href="#module-Stdlib" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Stdlib/index.html">Stdlib</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_in_path"><a href="#val-find_in_path" class="anchor"></a><code><span><span class="keyword">val</span> find_in_path : <span><span>string list</span> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_in_path_rel"><a href="#val-find_in_path_rel" class="anchor"></a><code><span><span class="keyword">val</span> find_in_path_rel : <span><span>string list</span> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_in_path_uncap"><a href="#val-find_in_path_uncap" class="anchor"></a><code><span><span class="keyword">val</span> find_in_path_uncap : <span><span>string list</span> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-remove_file"><a href="#val-remove_file" class="anchor"></a><code><span><span class="keyword">val</span> remove_file : <span>string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-expand_directory"><a href="#val-expand_directory" class="anchor"></a><code><span><span class="keyword">val</span> expand_directory : <span>string <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-split_path_contents"><a href="#val-split_path_contents" class="anchor"></a><code><span><span class="keyword">val</span> split_path_contents : <span>?sep:char <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> <span>string list</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create_hashtable"><a href="#val-create_hashtable" class="anchor"></a><code><span><span class="keyword">val</span> create_hashtable : <span>int <span class="arrow">&#45;&gt;</span></span> <span><span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <a href="../Stdlib/Hashtbl/index.html#type-t">Stdlib.Hashtbl.t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-copy_file"><a href="#val-copy_file" class="anchor"></a><code><span><span class="keyword">val</span> copy_file : <span><a href="../Stdlib/index.html#type-in_channel">in_channel</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Stdlib/index.html#type-out_channel">out_channel</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-copy_file_chunk"><a href="#val-copy_file_chunk" class="anchor"></a><code><span><span class="keyword">val</span> copy_file_chunk : <span><a href="../Stdlib/index.html#type-in_channel">in_channel</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Stdlib/index.html#type-out_channel">out_channel</a> <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-string_of_file"><a href="#val-string_of_file" class="anchor"></a><code><span><span class="keyword">val</span> string_of_file : <span><a href="../Stdlib/index.html#type-in_channel">in_channel</a> <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-output_to_file_via_temporary"><a href="#val-output_to_file_via_temporary" class="anchor"></a><code><span><span class="keyword">val</span> output_to_file_via_temporary :
<span>?mode:<span><a href="../Stdlib/index.html#type-open_flag">open_flag</a> list</span> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span>string <span class="arrow">&#45;&gt;</span></span> <span><a href="../Stdlib/index.html#type-out_channel">out_channel</a> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-protect_writing_to_file"><a href="#val-protect_writing_to_file" class="anchor"></a><code><span><span class="keyword">val</span> protect_writing_to_file : <span>filename:string <span class="arrow">&#45;&gt;</span></span> <span>f:<span>(<span><a href="../Stdlib/index.html#type-out_channel">out_channel</a> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Open the given <code>filename</code> for writing (in binary mode), pass the <code>out_channel</code> to the given function, then close the channel. If the function raises an exception then <code>filename</code> will be removed.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-log2"><a href="#val-log2" class="anchor"></a><code><span><span class="keyword">val</span> log2 : <span>int <span class="arrow">&#45;&gt;</span></span> int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-align"><a href="#val-align" class="anchor"></a><code><span><span class="keyword">val</span> align : <span>int <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-no_overflow_add"><a href="#val-no_overflow_add" class="anchor"></a><code><span><span class="keyword">val</span> no_overflow_add : <span>int <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-no_overflow_sub"><a href="#val-no_overflow_sub" class="anchor"></a><code><span><span class="keyword">val</span> no_overflow_sub : <span>int <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-no_overflow_mul"><a href="#val-no_overflow_mul" class="anchor"></a><code><span><span class="keyword">val</span> no_overflow_mul : <span>int <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-no_overflow_lsl"><a href="#val-no_overflow_lsl" class="anchor"></a><code><span><span class="keyword">val</span> no_overflow_lsl : <span>int <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Int_literal_converter"><a href="#module-Int_literal_converter" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Int_literal_converter/index.html">Int_literal_converter</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-chop_extensions"><a href="#val-chop_extensions" class="anchor"></a><code><span><span class="keyword">val</span> chop_extensions : <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-search_substring"><a href="#val-search_substring" class="anchor"></a><code><span><span class="keyword">val</span> search_substring : <span>string <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-replace_substring"><a href="#val-replace_substring" class="anchor"></a><code><span><span class="keyword">val</span> replace_substring : <span>before:string <span class="arrow">&#45;&gt;</span></span> <span>after:string <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-rev_split_words"><a href="#val-rev_split_words" class="anchor"></a><code><span><span class="keyword">val</span> rev_split_words : <span>string <span class="arrow">&#45;&gt;</span></span> <span>string list</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_ref"><a href="#val-get_ref" class="anchor"></a><code><span><span class="keyword">val</span> get_ref : <span><span><span><span class="type-var">'a</span> list</span> <a href="../Stdlib/index.html#type-ref">ref</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> list</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_or_ignore"><a href="#val-set_or_ignore" class="anchor"></a><code><span><span class="keyword">val</span> set_or_ignore : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> option</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span><span class="type-var">'b</span> option</span> <a href="../Stdlib/index.html#type-ref">ref</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fst3"><a href="#val-fst3" class="anchor"></a><code><span><span class="keyword">val</span> fst3 : <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span> * <span class="type-var">'c</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-snd3"><a href="#val-snd3" class="anchor"></a><code><span><span class="keyword">val</span> snd3 : <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span> * <span class="type-var">'c</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-thd3"><a href="#val-thd3" class="anchor"></a><code><span><span class="keyword">val</span> thd3 : <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span> * <span class="type-var">'c</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'c</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fst4"><a href="#val-fst4" class="anchor"></a><code><span><span class="keyword">val</span> fst4 : <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span> * <span class="type-var">'c</span> * <span class="type-var">'d</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-snd4"><a href="#val-snd4" class="anchor"></a><code><span><span class="keyword">val</span> snd4 : <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span> * <span class="type-var">'c</span> * <span class="type-var">'d</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-thd4"><a href="#val-thd4" class="anchor"></a><code><span><span class="keyword">val</span> thd4 : <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span> * <span class="type-var">'c</span> * <span class="type-var">'d</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'c</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-for4"><a href="#val-for4" class="anchor"></a><code><span><span class="keyword">val</span> for4 : <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span> * <span class="type-var">'c</span> * <span class="type-var">'d</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'d</span></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-LongString"><a href="#module-LongString" class="anchor"></a><code><span><span class="keyword">module</span> <a href="LongString/index.html">LongString</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-edit_distance"><a href="#val-edit_distance" class="anchor"></a><code><span><span class="keyword">val</span> edit_distance : <span>string <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> <span>int option</span></span></code></div><div class="spec-doc"><p><code>edit_distance a b cutoff</code> computes the edit distance between strings <code>a</code> and <code>b</code>. To help efficiency, it uses a cutoff: if the distance <code>d</code> is smaller than <code>cutoff</code>, it returns <code>Some d</code>, else <code>None</code>.</p><p>The distance algorithm currently used is Damerau-Levenshtein: it computes the number of insertion, deletion, substitution of letters, or swapping of adjacent letters to go from one word to the other. The particular algorithm may change in the future.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-spellcheck"><a href="#val-spellcheck" class="anchor"></a><code><span><span class="keyword">val</span> spellcheck : <span><span>string list</span> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> <span>string list</span></span></code></div><div class="spec-doc"><p><code>spellcheck env name</code> takes a list of names <code>env</code> that exist in the current environment and an erroneous <code>name</code>, and returns a list of suggestions taken from <code>env</code>, that are close enough to <code>name</code> that it may be a typo for one of them.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-did_you_mean"><a href="#val-did_you_mean" class="anchor"></a><code><span><span class="keyword">val</span> did_you_mean : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span>string list</span>)</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>did_you_mean ppf get_choices</code> hints that the user may have meant one of the option returned by calling <code>get_choices</code>. It does nothing if the returned list is empty.</p><p>The <code>unit -&gt; ...</code> thunking is meant to delay any potentially-slow computation (typically computing edit-distance with many things from the current environment) to when the hint message is to be printed. You should print an understandable error message before calling <code>did_you_mean</code>, so that users get a clear notification of the failure even if producing the hint is slow.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-cut_at"><a href="#val-cut_at" class="anchor"></a><code><span><span class="keyword">val</span> cut_at : <span>string <span class="arrow">&#45;&gt;</span></span> <span>char <span class="arrow">&#45;&gt;</span></span> string * string</span></code></div><div class="spec-doc"><p><code>String.cut_at s c</code> returns a pair containing the sub-string before the first occurrence of <code>c</code> in <code>s</code>, and the sub-string after the first occurrence of <code>c</code> in <code>s</code>. <code>let (before, after) = String.cut_at s c in
before ^ String.make 1 c ^ after</code> is the identity if <code>s</code> contains <code>c</code>.</p><p>Raise <code>Not_found</code> if the character does not appear in the string</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 4.01</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-ordinal_suffix"><a href="#val-ordinal_suffix" class="anchor"></a><code><span><span class="keyword">val</span> ordinal_suffix : <span>int <span class="arrow">&#45;&gt;</span></span> string</span></code></div><div class="spec-doc"><p><code>ordinal_suffix n</code> is the appropriate suffix to append to the numeral <code>n</code> as an ordinal number: <code>1</code> -&gt; <code>&quot;st&quot;</code>, <code>2</code> -&gt; <code>&quot;nd&quot;</code>, <code>3</code> -&gt; <code>&quot;rd&quot;</code>, <code>4</code> -&gt; <code>&quot;th&quot;</code>, and so on. Handles larger numbers (e.g., <code>42</code> -&gt; <code>&quot;nd&quot;</code>) and the numbers 11--13 (which all get <code>&quot;th&quot;</code>) correctly.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Color"><a href="#module-Color" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Color/index.html">Color</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Error_style"><a href="#module-Error_style" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Error_style/index.html">Error_style</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-normalise_eol"><a href="#val-normalise_eol" class="anchor"></a><code><span><span class="keyword">val</span> normalise_eol : <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div><div class="spec-doc"><p><code>normalise_eol s</code> returns a fresh copy of <code>s</code> with any '\r' characters removed. Intended for pre-processing text which will subsequently be printed on a channel which performs EOL transformations (i.e. Windows)</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-delete_eol_spaces"><a href="#val-delete_eol_spaces" class="anchor"></a><code><span><span class="keyword">val</span> delete_eol_spaces : <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div><div class="spec-doc"><p><code>delete_eol_spaces s</code> returns a fresh copy of <code>s</code> with any end of line spaces removed. Intended to normalize the output of the toplevel for tests.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pp_two_columns"><a href="#val-pp_two_columns" class="anchor"></a><code><span><span class="keyword">val</span> pp_two_columns :
<span>?sep:string <span class="arrow">&#45;&gt;</span></span>
<span>?max_lines:int <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><span>(string * string)</span> list</span> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p><code>pp_two_columns ?sep ?max_lines ppf l</code> prints the lines in <code>l</code> as two columns separated by <code>sep</code> (&quot;|&quot; by default). <code>max_lines</code> can be used to indicate a maximum number of lines to print -- an ellipsis gets inserted at the middle if the input has too many lines.</p><p>Example:</p><pre>pp_two_columns ~max_lines:3 Format.std_formatter [
&quot;abc&quot;, &quot;hello&quot;;
&quot;def&quot;, &quot;zzz&quot;;
&quot;a&quot; , &quot;bllbl&quot;;
&quot;bb&quot; , &quot;dddddd&quot;;
]</pre><p>prints</p><pre> abc | hello
...
bb | dddddd</pre></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-show_config_and_exit"><a href="#val-show_config_and_exit" class="anchor"></a><code><span><span class="keyword">val</span> show_config_and_exit : <span>unit <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>configuration variables</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-show_config_variable_and_exit"><a href="#val-show_config_variable_and_exit" class="anchor"></a><code><span><span class="keyword">val</span> show_config_variable_and_exit : <span>string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_build_path_prefix_map"><a href="#val-get_build_path_prefix_map" class="anchor"></a><code><span><span class="keyword">val</span> get_build_path_prefix_map : <span>unit <span class="arrow">&#45;&gt;</span></span> <span><a href="../Build_path_prefix_map/index.html#type-map">Build_path_prefix_map.map</a> option</span></span></code></div><div class="spec-doc"><p>Returns the map encoded in the <code>BUILD_PATH_PREFIX_MAP</code> environment variable.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-debug_prefix_map_flags"><a href="#val-debug_prefix_map_flags" class="anchor"></a><code><span><span class="keyword">val</span> debug_prefix_map_flags : <span>unit <span class="arrow">&#45;&gt;</span></span> <span>string list</span></span></code></div><div class="spec-doc"><p>Returns the list of <code>--debug-prefix-map</code> flags to be passed to the assembler, built from the <code>BUILD_PATH_PREFIX_MAP</code> environment variable.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-print_if"><a href="#val-print_if" class="anchor"></a><code><span><span class="keyword">val</span> print_if :
<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span>bool <a href="../Stdlib/index.html#type-ref">ref</a></span> <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span>
<span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>print_if ppf flag fmt x</code> prints <code>x</code> with <code>fmt</code> on <code>ppf</code> if <code>b</code> is true.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-filepath"><a href="#type-filepath" class="anchor"></a><code><span><span class="keyword">type</span> filepath</span><span> = string</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-modname"><a href="#type-modname" class="anchor"></a><code><span><span class="keyword">type</span> modname</span><span> = string</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-crcs"><a href="#type-crcs" class="anchor"></a><code><span><span class="keyword">type</span> crcs</span><span> = <span><span>(<a href="#type-modname">modname</a> * <span><a href="../Stdlib/Digest/index.html#type-t">Stdlib.Digest.t</a> option</span>)</span> list</span></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-alerts"><a href="#type-alerts" class="anchor"></a><code><span><span class="keyword">type</span> alerts</span><span> = <span>string <a href="Stdlib/String/Map/index.html#type-t">Stdlib.String.Map.t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Magic_number"><a href="#module-Magic_number" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Magic_number/index.html">Magic_number</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>a typical magic number is &quot;Caml1999I011&quot;; it is formed of an alphanumeric prefix, here Caml1990I, followed by a version, here 011. The prefix identifies the kind of the versioned data: here the I indicates that it is the magic number for .cmi files.</p></div></div></div></body></html>