Variants
Intro
- A promise statement
- We're going to introduce variants
 - Similar to Rust's enum or TypeScript's tagged union
 
 - A preview of what's to come
 
Body
Brief recap of how sum types work, drawing parallels to similar constructs in existing languages.
Point out two special variants, option<T> and expected<T, E>
- Draw parallels with Rust
 - Show examples of what 
wai-bindgengenerates for Python and JavaScript 
Define the WIT file:
// calculator.wai
 
variant instruction {
    add(i32),
    subtract(i32),
    multiply(i32),
    divide(i32),
}
 
record out-of-bounds-error {
    value: i32,
    min: i32,
    max: i32,
}
 
variant error {
    divide-by-zero,
    out-of-bounds(out-of-bounds-error),
}
 
/// Execute a sequence of instructions on a number.
///
/// This is a basic calculator!
calculate: func(start: i32, instructions: list<intruction>) -> expected<i32, error>Implement the guest:
- Handle divide by zero
 - Hard-code a limit of 
(-10, 50)for the value - Publish to WAPM (links, etc.)
 
Use the bindings:
- Create a Python project
- Show how you might handle errors using 
isinstance() - Show the version with Python's Structural Pattern Matching (opens in a new tab)
 
 - Show how you might handle errors using 
 - Create a JavaScript project
- Show how you handle errors in TypeScript (switch-case, etc.)
 
 
Conclusion
- Reminder of how helpful the guide is
 - Reiterate how important your topic is
 - Call-to-action
- Add different error cases
 - Develop your own abstractions for working with errors
 
 
Checklist
Inspiration 💡
- Read articles and watch videos that inspire me
 - Brainstorm the topics that I want to write about in bullet points
 - Reorder those bullet points to create a line of thought
 
Draft ✏
- Expand those bullet points into sentences/text
 - Go over the document
 
Ready to Publish 🗞
- Draft 5 titles and pick one
 - Revise the complete text for typos
 - Preview the text
 - Publish or schedule the post