ocaml-containers/0.20/type_CCGraph.html
2016-10-14 13:43:14 +02:00

341 lines
No EOL
59 KiB
HTML

<html><head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<link rel="Start" href="index.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of class methods" rel=Appendix href="index_methods.html">
<link title="Index of class types" rel=Appendix href="index_class_types.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Index of module types" rel=Appendix href="index_module_types.html">
<link title="CCVector" rel="Chapter" href="CCVector.html">
<link title="CCPrint" rel="Chapter" href="CCPrint.html">
<link title="CCError" rel="Chapter" href="CCError.html">
<link title="CCHeap" rel="Chapter" href="CCHeap.html">
<link title="CCList" rel="Chapter" href="CCList.html">
<link title="CCOpt" rel="Chapter" href="CCOpt.html">
<link title="CCPair" rel="Chapter" href="CCPair.html">
<link title="CCFun" rel="Chapter" href="CCFun.html">
<link title="CCHash" rel="Chapter" href="CCHash.html">
<link title="CCInt" rel="Chapter" href="CCInt.html">
<link title="CCBool" rel="Chapter" href="CCBool.html">
<link title="CCFloat" rel="Chapter" href="CCFloat.html">
<link title="CCArray" rel="Chapter" href="CCArray.html">
<link title="CCRef" rel="Chapter" href="CCRef.html">
<link title="CCSet" rel="Chapter" href="CCSet.html">
<link title="CCOrd" rel="Chapter" href="CCOrd.html">
<link title="CCRandom" rel="Chapter" href="CCRandom.html">
<link title="CCString" rel="Chapter" href="CCString.html">
<link title="CCHashtbl" rel="Chapter" href="CCHashtbl.html">
<link title="CCMap" rel="Chapter" href="CCMap.html">
<link title="CCFormat" rel="Chapter" href="CCFormat.html">
<link title="CCIO" rel="Chapter" href="CCIO.html">
<link title="CCInt64" rel="Chapter" href="CCInt64.html">
<link title="CCChar" rel="Chapter" href="CCChar.html">
<link title="CCResult" rel="Chapter" href="CCResult.html">
<link title="Containers" rel="Chapter" href="Containers.html">
<link title="CCKTree" rel="Chapter" href="CCKTree.html">
<link title="CCKList" rel="Chapter" href="CCKList.html">
<link title="CCLazy_list" rel="Chapter" href="CCLazy_list.html">
<link title="CCMultiMap" rel="Chapter" href="CCMultiMap.html">
<link title="CCMultiSet" rel="Chapter" href="CCMultiSet.html">
<link title="CCTrie" rel="Chapter" href="CCTrie.html">
<link title="CCFlatHashtbl" rel="Chapter" href="CCFlatHashtbl.html">
<link title="CCCache" rel="Chapter" href="CCCache.html">
<link title="CCPersistentHashtbl" rel="Chapter" href="CCPersistentHashtbl.html">
<link title="CCDeque" rel="Chapter" href="CCDeque.html">
<link title="CCFQueue" rel="Chapter" href="CCFQueue.html">
<link title="CCBV" rel="Chapter" href="CCBV.html">
<link title="CCMixtbl" rel="Chapter" href="CCMixtbl.html">
<link title="CCMixmap" rel="Chapter" href="CCMixmap.html">
<link title="CCRingBuffer" rel="Chapter" href="CCRingBuffer.html">
<link title="CCIntMap" rel="Chapter" href="CCIntMap.html">
<link title="CCPersistentArray" rel="Chapter" href="CCPersistentArray.html">
<link title="CCMixset" rel="Chapter" href="CCMixset.html">
<link title="CCHashconsedSet" rel="Chapter" href="CCHashconsedSet.html">
<link title="CCGraph" rel="Chapter" href="CCGraph.html">
<link title="CCHashSet" rel="Chapter" href="CCHashSet.html">
<link title="CCBitField" rel="Chapter" href="CCBitField.html">
<link title="CCHashTrie" rel="Chapter" href="CCHashTrie.html">
<link title="CCBloom" rel="Chapter" href="CCBloom.html">
<link title="CCWBTree" rel="Chapter" href="CCWBTree.html">
<link title="CCRAL" rel="Chapter" href="CCRAL.html">
<link title="CCAllocCache" rel="Chapter" href="CCAllocCache.html">
<link title="CCImmutArray" rel="Chapter" href="CCImmutArray.html">
<link title="CCHet" rel="Chapter" href="CCHet.html">
<link title="Containers_string" rel="Chapter" href="Containers_string.html">
<link title="CCKMP" rel="Chapter" href="CCKMP.html">
<link title="CCLevenshtein" rel="Chapter" href="CCLevenshtein.html">
<link title="CCApp_parse" rel="Chapter" href="CCApp_parse.html">
<link title="CCParse" rel="Chapter" href="CCParse.html">
<link title="CCBigstring" rel="Chapter" href="CCBigstring.html">
<link title="CCArray1" rel="Chapter" href="CCArray1.html">
<link title="CCPool" rel="Chapter" href="CCPool.html">
<link title="CCLock" rel="Chapter" href="CCLock.html">
<link title="CCSemaphore" rel="Chapter" href="CCSemaphore.html">
<link title="CCThread" rel="Chapter" href="CCThread.html">
<link title="CCBlockingQueue" rel="Chapter" href="CCBlockingQueue.html">
<link title="CCTimer" rel="Chapter" href="CCTimer.html">
<link title="Containers_advanced" rel="Chapter" href="Containers_advanced.html">
<link title="CCLinq" rel="Chapter" href="CCLinq.html">
<link title="CCBatch" rel="Chapter" href="CCBatch.html">
<link title="CCCat" rel="Chapter" href="CCCat.html">
<link title="CCMonadIO" rel="Chapter" href="CCMonadIO.html">
<link title="Containers_io_is_deprecated" rel="Chapter" href="Containers_io_is_deprecated.html">
<link title="CCUnix" rel="Chapter" href="CCUnix.html">
<link title="CCSexp" rel="Chapter" href="CCSexp.html">
<link title="CCSexpM" rel="Chapter" href="CCSexpM.html"><title>Containers doc : CCGraph</title>
</head>
<body>
<code class="code"><span class="keyword">sig</span><br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;sequence&nbsp;=&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;sequence_once&nbsp;=&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.sequence<br>
&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">Sequence_once</span><br>
&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">Seq</span>&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;t&nbsp;=&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.sequence<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;return&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.sequence<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;(&nbsp;&gt;&gt;=&nbsp;)&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;map&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filter_map&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;option)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;iter&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold&nbsp;:&nbsp;(<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;to_list&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;t&nbsp;=&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;children&nbsp;:&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>e&nbsp;<span class="constructor">CCGraph</span>.sequence;<br>
&nbsp;&nbsp;&nbsp;&nbsp;origin&nbsp;:&nbsp;<span class="keywordsign">'</span>e&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v;<br>
&nbsp;&nbsp;&nbsp;&nbsp;dest&nbsp;:&nbsp;<span class="keywordsign">'</span>e&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v;<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;graph&nbsp;=&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;make&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;origin:(<span class="keywordsign">'</span>e&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;dest:(<span class="keywordsign">'</span>e&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>e&nbsp;<span class="constructor">CCGraph</span>.sequence)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;make_labelled_tuple&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;*&nbsp;<span class="keywordsign">'</span>v)&nbsp;<span class="constructor">CCGraph</span>.sequence)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>v&nbsp;*&nbsp;<span class="keywordsign">'</span>a&nbsp;*&nbsp;<span class="keywordsign">'</span>v)&nbsp;<span class="constructor">CCGraph</span>.t<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;make_tuple&nbsp;:&nbsp;(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>v&nbsp;*&nbsp;<span class="keywordsign">'</span>v)&nbsp;<span class="constructor">CCGraph</span>.t<br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;tag_set&nbsp;=&nbsp;{&nbsp;get_tag&nbsp;:&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool;&nbsp;set_tag&nbsp;:&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit;&nbsp;}<br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;(<span class="keywordsign">'</span>k,&nbsp;<span class="keywordsign">'</span>a)&nbsp;table&nbsp;=&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;mem&nbsp;:&nbsp;<span class="keywordsign">'</span>k&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool;<br>
&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;:&nbsp;<span class="keywordsign">'</span>k&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a;<br>
&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;:&nbsp;<span class="keywordsign">'</span>k&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit;<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;set&nbsp;=&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit)&nbsp;<span class="constructor">CCGraph</span>.table<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mk_table&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;?eq:(<span class="keywordsign">'</span>k&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>k&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;?hash:(<span class="keywordsign">'</span>k&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>k,&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="constructor">CCGraph</span>.table<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mk_map&nbsp;:&nbsp;?cmp:(<span class="keywordsign">'</span>k&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>k&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>k,&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="constructor">CCGraph</span>.table<br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;bag&nbsp;=&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit;<br>
&nbsp;&nbsp;&nbsp;&nbsp;is_empty&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool;<br>
&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a;<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mk_queue&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.bag<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mk_stack&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.bag<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mk_heap&nbsp;:&nbsp;leq:(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">CCGraph</span>.bag<br>
&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">Traverse</span>&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>e&nbsp;path&nbsp;=&nbsp;<span class="keywordsign">'</span>e&nbsp;list<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;generic&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?tbl:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bag:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.bag&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;generic_tag&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.tag_set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bag:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.bag&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dfs&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?tbl:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dfs_tag&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.tag_set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bfs&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?tbl:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bfs_tag&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.tag_set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dijkstra&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?tbl:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?dist:(<span class="keywordsign">'</span>e&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>v&nbsp;*&nbsp;int&nbsp;*&nbsp;<span class="keywordsign">'</span>e&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.path)&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dijkstra_tag&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?dist:(<span class="keywordsign">'</span>e&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.tag_set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>v&nbsp;*&nbsp;int&nbsp;*&nbsp;<span class="keywordsign">'</span>e&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.path)&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">Event</span>&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;edge_kind&nbsp;=&nbsp;[&nbsp;<span class="keywordsign">`</span><span class="constructor">Back</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Cross</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Forward</span>&nbsp;]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;t&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<span class="keywordsign">`</span><span class="constructor">Edge</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>e&nbsp;*&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.edge_kind<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Enter</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;*&nbsp;int&nbsp;*&nbsp;<span class="keywordsign">'</span>e&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.path<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Exit</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_vertex&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>v&nbsp;*&nbsp;[&nbsp;<span class="keywordsign">`</span><span class="constructor">Enter</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Exit</span>&nbsp;])&nbsp;option<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_enter&nbsp;:&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;option<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_exit&nbsp;:&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;option<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_edge&nbsp;:&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>e&nbsp;option<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_edge_kind&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>e&nbsp;*&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.edge_kind)&nbsp;option<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dfs&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?tbl:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?eq:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.graph&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dfs_tag&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?eq:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.tag_set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.graph&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;is_dag&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;?tbl:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">Has_cycle</span><br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;topo_sort&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;?eq:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;?rev:bool&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;?tbl:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;list<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;topo_sort_tag&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;?eq:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;?rev:bool&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;tags:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.tag_set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;list<br>
&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">LazyTree</span>&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;t&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Vertex</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;*&nbsp;(<span class="keywordsign">'</span>e&nbsp;*&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">LazyTree</span>.t)&nbsp;list&nbsp;<span class="constructor">Lazy</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;map_v&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>a,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">LazyTree</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>b,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">LazyTree</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold_v&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keywordsign">'</span>acc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>acc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>acc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">LazyTree</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>acc<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;spanning_tree&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;?tbl:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">LazyTree</span>.t<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;spanning_tree_tag&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;tags:<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.tag_set&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">LazyTree</span>.t<br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;scc_state<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;scc&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;?tbl:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.scc_state)&nbsp;<span class="constructor">CCGraph</span>.table&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;list&nbsp;<span class="constructor">CCGraph</span>.sequence_once<br>
&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">Dot</span>&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;attribute&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<span class="keywordsign">`</span><span class="constructor">Color</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Label</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Other</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;string<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Shape</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Style</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="keywordsign">`</span><span class="constructor">Weight</span>&nbsp;<span class="keyword">of</span>&nbsp;int&nbsp;]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;vertex_state<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pp&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?tbl:(<span class="keywordsign">'</span>v,&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.vertex_state)&nbsp;<span class="constructor">CCGraph</span>.table&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?eq:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?attrs_v:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.attribute&nbsp;list)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?attrs_e:(<span class="keywordsign">'</span>e&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.attribute&nbsp;list)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?name:string&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Format</span>.formatter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pp_seq&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?tbl:(<span class="keywordsign">'</span>v,&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.vertex_state)&nbsp;<span class="constructor">CCGraph</span>.table&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?eq:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?attrs_v:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.attribute&nbsp;list)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?attrs_e:(<span class="keywordsign">'</span>e&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.attribute&nbsp;list)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?name:string&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graph:(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Format</span>.formatter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;with_out&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="constructor">Format</span>.formatter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;mut_graph&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&nbsp;add_edge&nbsp;:&nbsp;<span class="keywordsign">'</span>e&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit;&nbsp;graph&nbsp;:&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>e)&nbsp;<span class="constructor">CCGraph</span>.t;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remove&nbsp;:&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;&gt;<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mk_mut_tbl&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;?eq:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;?hash:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>v&nbsp;*&nbsp;<span class="keywordsign">'</span>a&nbsp;*&nbsp;<span class="keywordsign">'</span>v)&nbsp;<span class="constructor">CCGraph</span>.mut_graph<br>
&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="keyword">type</span>&nbsp;<span class="constructor">MAP</span>&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;vertex<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;as_graph&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex,&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;*&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.graph<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;empty&nbsp;:&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;add_edge&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;remove_edge&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;add&nbsp;:&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;remove&nbsp;:&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;union&nbsp;:&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;vertices&nbsp;:&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;<span class="constructor">CCGraph</span>.sequence<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;vertices_l&nbsp;:&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;list<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;of_list&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;*&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;add_list&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;*&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;to_list&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;*&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex)&nbsp;list<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;of_seq&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;*&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex)&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;add_seq&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;*&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex)&nbsp;<span class="constructor">CCGraph</span>.sequence&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;to_seq&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex&nbsp;*&nbsp;<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex)&nbsp;<span class="constructor">CCGraph</span>.sequence<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">Map</span>&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">functor</span>&nbsp;(<span class="constructor">O</span>&nbsp;:&nbsp;<span class="constructor">Map</span>.<span class="constructor">OrderedType</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;vertex&nbsp;=&nbsp;<span class="constructor">O</span>.t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;as_graph&nbsp;:&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(vertex,&nbsp;vertex&nbsp;*&nbsp;vertex)&nbsp;graph<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;empty&nbsp;:&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;add_edge&nbsp;:&nbsp;vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;remove_edge&nbsp;:&nbsp;vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;add&nbsp;:&nbsp;vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;remove&nbsp;:&nbsp;vertex&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;union&nbsp;:&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;vertices&nbsp;:&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;vertex&nbsp;sequence<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;vertices_l&nbsp;:&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;vertex&nbsp;list<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;of_list&nbsp;:&nbsp;(vertex&nbsp;*&nbsp;vertex)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;add_list&nbsp;:&nbsp;(vertex&nbsp;*&nbsp;vertex)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;to_list&nbsp;:&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(vertex&nbsp;*&nbsp;vertex)&nbsp;list<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;of_seq&nbsp;:&nbsp;(vertex&nbsp;*&nbsp;vertex)&nbsp;sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;add_seq&nbsp;:&nbsp;(vertex&nbsp;*&nbsp;vertex)&nbsp;sequence&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;to_seq&nbsp;:&nbsp;t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(vertex&nbsp;*&nbsp;vertex)&nbsp;sequence<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;of_list&nbsp;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;?eq:(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v&nbsp;*&nbsp;<span class="keywordsign">'</span>v)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>v&nbsp;*&nbsp;<span class="keywordsign">'</span>v)&nbsp;<span class="constructor">CCGraph</span>.t<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;of_hashtbl&nbsp;:&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>v&nbsp;list)&nbsp;<span class="constructor">Hashtbl</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>v&nbsp;*&nbsp;<span class="keywordsign">'</span>v)&nbsp;<span class="constructor">CCGraph</span>.t<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;of_fun&nbsp;:&nbsp;(<span class="keywordsign">'</span>v&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>v&nbsp;list)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>v,&nbsp;<span class="keywordsign">'</span>v&nbsp;*&nbsp;<span class="keywordsign">'</span>v)&nbsp;<span class="constructor">CCGraph</span>.t<br>
&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;divisors_graph&nbsp;:&nbsp;(int,&nbsp;int&nbsp;*&nbsp;int)&nbsp;<span class="constructor">CCGraph</span>.t<br>
<span class="keyword">end</span></code></body></html>