name: 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.
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.