diff --git a/docs/four-lectures.pdf b/docs/four-lectures.pdf new file mode 100644 index 0000000..b2c7e50 Binary files /dev/null and b/docs/four-lectures.pdf differ diff --git a/results/four-lectures_structure.json b/results/four-lectures_structure.json new file mode 100644 index 0000000..cf73815 --- /dev/null +++ b/results/four-lectures_structure.json @@ -0,0 +1,333 @@ +{ + "doc_name": "four-lectures.pdf", + "structure": [ + { + "title": "Preface", + "start_index": 1, + "end_index": 1, + "node_id": "0000" + }, + { + "title": "ML at a Glance", + "start_index": 2, + "end_index": 2, + "nodes": [ + { + "title": "An ML session", + "start_index": 2, + "end_index": 3, + "node_id": "0002" + }, + { + "title": "Types and Values", + "start_index": 3, + "end_index": 4, + "node_id": "0003" + }, + { + "title": "Recursive Functions", + "start_index": 4, + "end_index": 4, + "node_id": "0004" + }, + { + "title": "Raising Exceptions", + "start_index": 4, + "end_index": 5, + "node_id": "0005" + }, + { + "title": "Structures", + "start_index": 5, + "end_index": 6, + "node_id": "0006" + }, + { + "title": "Signatures", + "start_index": 6, + "end_index": 7, + "node_id": "0007" + }, + { + "title": "Coercive Signature Matching", + "start_index": 7, + "end_index": 8, + "node_id": "0008" + }, + { + "title": "Functor Declaration", + "start_index": 8, + "end_index": 9, + "node_id": "0009" + }, + { + "title": "Functor Application", + "start_index": 9, + "end_index": 9, + "node_id": "0010" + }, + { + "title": "Summary", + "start_index": 9, + "end_index": 9, + "node_id": "0011" + } + ], + "node_id": "0001" + }, + { + "title": "Programming with ML Modules", + "start_index": 10, + "end_index": 10, + "nodes": [ + { + "title": "Introduction", + "start_index": 10, + "end_index": 11, + "node_id": "0013" + }, + { + "title": "Signatures", + "start_index": 11, + "end_index": 12, + "node_id": "0014" + }, + { + "title": "Structures", + "start_index": 12, + "end_index": 13, + "node_id": "0015" + }, + { + "title": "Functors", + "start_index": 13, + "end_index": 14, + "node_id": "0016" + }, + { + "title": "Substructures", + "start_index": 14, + "end_index": 15, + "node_id": "0017" + }, + { + "title": "Sharing", + "start_index": 15, + "end_index": 16, + "node_id": "0018" + }, + { + "title": "Building the System", + "start_index": 16, + "end_index": 17, + "node_id": "0019" + }, + { + "title": "Separate Compilation", + "start_index": 17, + "end_index": 18, + "node_id": "0020" + }, + { + "title": "Good Style", + "start_index": 18, + "end_index": 18, + "node_id": "0021" + }, + { + "title": "Bad Style", + "start_index": 18, + "end_index": 19, + "node_id": "0022" + } + ], + "node_id": "0012" + }, + { + "title": "The Static Semantics of Modules", + "start_index": 20, + "end_index": 20, + "nodes": [ + { + "title": "Elaboration", + "start_index": 20, + "end_index": 21, + "node_id": "0024" + }, + { + "title": "Names", + "start_index": 21, + "end_index": 21, + "node_id": "0025" + }, + { + "title": "Decorating Structures", + "start_index": 21, + "end_index": 21, + "node_id": "0026" + }, + { + "title": "Decorating Signatures", + "start_index": 22, + "end_index": 23, + "node_id": "0027" + }, + { + "title": "Signature Instantiation", + "start_index": 23, + "end_index": 24, + "node_id": "0028" + }, + { + "title": "Signature Matching", + "start_index": 24, + "end_index": 25, + "node_id": "0029" + }, + { + "title": "Signature Constraints", + "start_index": 25, + "end_index": 25, + "node_id": "0030" + }, + { + "title": "Decorating Functors", + "start_index": 26, + "end_index": 26, + "node_id": "0031" + }, + { + "title": "External Sharing", + "start_index": 26, + "end_index": 27, + "node_id": "0032" + }, + { + "title": "Functors with Arguments", + "start_index": 27, + "end_index": 28, + "node_id": "0033" + }, + { + "title": "Sharing Between Argument and Result", + "start_index": 28, + "end_index": 28, + "node_id": "0034" + }, + { + "title": "Explicit Result Signatures", + "start_index": 28, + "end_index": 29, + "node_id": "0035" + } + ], + "node_id": "0023" + }, + { + "title": "Implementing an Interpreter in ML", + "start_index": 30, + "end_index": 32, + "nodes": [ + { + "title": "Version 1: The Bare Typechecker", + "start_index": 32, + "end_index": 33, + "node_id": "0037" + }, + { + "title": "Version 2: Adding Lists and Polymorphism", + "start_index": 33, + "end_index": 37, + "node_id": "0038" + }, + { + "title": "Version 3: A Different Implementation of Types", + "start_index": 37, + "end_index": 39, + "node_id": "0039" + }, + { + "title": "Version 4: Introducing Variables and Let", + "start_index": 39, + "end_index": 43, + "node_id": "0040" + }, + { + "title": "Acknowledgement", + "start_index": 43, + "end_index": 43, + "node_id": "0041" + } + ], + "node_id": "0036" + }, + { + "title": "Appendix A: The Bare Interpreter", + "start_index": 44, + "end_index": 44, + "nodes": [ + { + "title": "Syntax", + "start_index": 44, + "end_index": 44, + "node_id": "0043" + }, + { + "title": "Parsing", + "start_index": 44, + "end_index": 45, + "node_id": "0044" + }, + { + "title": "Environments", + "start_index": 45, + "end_index": 46, + "node_id": "0045" + }, + { + "title": "Evaluation", + "start_index": 46, + "end_index": 46, + "node_id": "0046" + }, + { + "title": "Type Checking", + "start_index": 46, + "end_index": 46, + "node_id": "0047" + }, + { + "title": "The Interpreter", + "start_index": 46, + "end_index": 47, + "node_id": "0048" + }, + { + "title": "The Evaluator", + "start_index": 47, + "end_index": 49, + "node_id": "0049" + }, + { + "title": "The Typechecker", + "start_index": 49, + "end_index": 50, + "node_id": "0050" + }, + { + "title": "The Basics", + "start_index": 50, + "end_index": 52, + "node_id": "0051" + } + ], + "node_id": "0042" + }, + { + "title": "Appendix B: Files", + "start_index": 53, + "end_index": 53, + "node_id": "0052" + } + ] +} \ No newline at end of file