Skip to main content

result

OCaml Result type patterns using OCaml 5.x stdlib. Use when Claude needs to: (1) Handle errors with Result types, (2) Chain Result operations with let*, (3) Extract values from Ok/Error, (4) Refactor code using local let* bindings to use Result.Syntax

Stars
31
Source
avsm/ocaml-claude-marketplace
Updated
2026-05-24
Slug
avsm--ocaml-claude-marketplace--result
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/avsm/ocaml-claude-marketplace/HEAD/plugins/ocaml-dev/skills/result/SKILL.md -o .claude/skills/result.md

Drops the SKILL.md into .claude/skills/result.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

OCaml Result Patterns

OCaml 5.x provides Result.Syntax for monadic chaining and Result.get_ok/Result.get_error for extraction.

Result.Syntax

Use open Result.Syntax to get let* and let+ bindings:

open Result.Syntax

let process request =
  let* req = validate request in
  let* auth = authenticate req in
  let* _ = authorize auth in
  execute req

DO NOT define local let ( let* ) = Result.bind. Use open Result.Syntax instead.

Extracting Values

Function Behavior on Error
Result.get_ok r Raises Invalid_argument
Result.get_error r Raises Invalid_argument
Result.value r ~default Returns default

Use Result.get_ok only when failure is a programming error:

(* Startup/config - crash on failure is intentional *)
let config = Result.get_ok (Config.load ())

(* Test setup - failure means test bug *)
let client = Result.get_ok (Tls.Config.client ~authenticator ())

Custom get_ok

Only define custom get_ok when you need different exception behavior:

(* Raises domain-specific Protocol_error instead of Invalid_argument *)
let get_ok = function
  | Ok x -> x
  | Error e -> raise (Protocol_error e)

If you just want Invalid_argument, use Result.get_ok directly.