| name | ocaml-tutorials |
| description | Creating OCaml library tutorials using .mld documentation format with MDX executable examples. Use when discussing tutorials, documentation, .mld files, MDX, or interactive documentation. |
| license | ISC |
OCaml Tutorial Creation
When to Use This Skill
Invoke this skill when:
- Creating tutorials for OCaml libraries
- Working with .mld documentation format
- Setting up MDX for executable examples
- Discussing interactive documentation
Overview
OCaml tutorials should:
- Introduce concepts gently
- Use executable code examples via MDX
- Progress from simple to complex
- Include practical patterns and use cases
File Structure
Required Components
- doc/ directory in project root
- tutorial.mld - Main tutorial content
- index.mld - Documentation index
- dune - Build rules
doc/dune Configuration
(mdx
(files tutorial.mld)
(libraries your_library_name))
(documentation
(package your_package_name)
(mld_files index tutorial))
dune-project Updates
Enable MDX:
(using mdx 0.4)
Add MDX as doc dependency:
(package
(name your_package)
(depends
...
(mdx :with-doc)
(odoc :with-doc)))
.mld Format
Document Structure
{0 Topic Name Tutorial}
Introduction text.
{1 Section Title}
Section content.
{2 Subsection Title}
Subsection content.
Executable Code Blocks
Use {@ocaml[...]} for executable examples:
{@ocaml[
# let x = 1 + 1;;
val x : int = 2
]}
- Lines starting with
#are input - Following lines are expected output
- MDX verifies output at build time
- Use
;;to terminate expressions
Non-Executable Code
Use {v ... v} for verbatim blocks:
{v
name: Alice
age: 30
v}
Cross-References
{!Library.function_name} - Function reference
{!Library.Module.type_name} - Type reference
{{!Library}API reference} - Link with custom text
Lists
{ul
{- Item one}
{- Item two}
}
{ol
{- First item}
{- Second item}
}
Formatting
{b bold text}
{i italic text}
Tutorial Content Guidelines
Structure
- Setup - How to load the library
- Basic Usage - Simplest examples
- Core Concepts - Main types and functions
- Common Patterns - Real-world usage
- Advanced Features - Complex functionality
- Error Handling - How errors work
- Summary - Quick reference
Setup Section
{1 Setup}
{@ocaml[
# #require "library_name";;
# open Library;;
]}
Best Practices
- Show output - Include expected output in examples
- Use consistent naming - Variables carry through examples
- Build complexity gradually - Each example builds on previous
- Explain the "why" - Not just syntax, but when to use features
- Reference documentation - Link to API docs
Verification
dune build @check # Verify syntax
dune build @doc # Build documentation
dune runtest # Run MDX tests (if configured)
Common Issues
Unresolved References
Use fully qualified names: {!Library.of_string} not {!of_string}
MDX Not Found
Enable in dune-project: (using mdx 0.4)
Output Mismatch
Run code manually, update expected output. Use <abstr> for abstract values.