Claude Code Skills·Claude Skills·The open SKILL.md registry for Claude
ClaudSkills / Content / translation

Domain Modeling Made Functional

Category: Content  ·  Sub-category: translation  ·  Last updated:
Apply Scott Wlaschin's "Domain Modeling Made Functional" (Pragmatic Bookshelf, 2018) — the functional rendering of domain-driven design. Covers making illegal states unrepresentable through algebraic data types, designing workflows as type signatures (Command → AsyncResult<Events, DomainError>), modeling errors as values via the three-track railroad (domain errors / infrastructure errors / panics), single-case wrappers for primitive obsession, choice-of-states for aggregates, DTO-to-domain translation at bounded-context edges, persistence ignorance via functional-core/imperative-shell, the impureim and Recawr (read-calculate-write) sandwich for structuring an application service as impure-pure-impure, dependency rejection and decoupling decisions from effects (the domain takes data and returns decisions/events rather than injecting dependencies), and workflow composition by chaining typed steps. Use when designing a new domain workflow / aggregate / API endpoint in a typed language (F#, Scala, Kotlin, TypeScript, C# with records + LanguageExt); when reviewing a domain model and asking whether its invariants are encoded in the type system vs in runtime guards; when refactoring exception-based domain code to errors-as-values; when explaining "make illegal states unrepresentable" or "workflows as type signatures"; when looking at a record bristling with `Option<>` and sibling-exclusive bools and wondering if it should be a sum type; when a team uses OO DDD (Evans/Vernon) but wants to lean into the type system; when structuring an application service as an impureim sandwich, or asking how to keep the domain pure when a decision needs an external call (re-quote, re-price) partway through. Strong complement to `domain-driven-design`, `hexagonal-clean-architecture`, and `clean-code` — those handle the organizational and strategic side, this skill handles the type-encoding side. Skip for dynamically-typed codebases (Python, Ruby, vanilla JS) where the techniques don't have a compiler to back them; for strategic-DDD questions about bounded contexts and ubiquitous language (use `domain-driven-design`); for pure OO pattern questions (use `solid-principles`, `responsibility-driven-design`).
Security AStatic scan found no risk patternsHow grading works ›

From the source SKILL.md

Scott Wlaschin's book is functional DDD: the same domain-modeling instinct as Evans/Vernon, applied with the rigor of a strong static type system. The thesis: most domain bugs are illegal states the type system was never told to forbid. Encode the constraints in types and the compiler becomes your domain expert.

What this skill does

Domain Modeling Made Functional is a community-contributed Claude Code skill in the translation sub-category. It ships as a SKILL.md file that Claude Code auto-discovers under ~/.claude/skills/domain-modeling-made-functional/ and loads when your prompt matches the skill's trigger.

When to invoke it: Use when designing a new domain workflow / aggregate / API endpoint in a typed language (F#, Scala, Kotlin, TypeScript, C# with records + LanguageExt); when reviewing a domain model and asking whether its invariants are encoded in the type system vs in runtime guards; when refactoring exception-based domain code to errors-as-values; when explaining "make illegal states unrepresentable" or "workflows as type signatures"; when looking at a record bristling with `Option<>` and sibling-exclusive bools and wondering if it should be a sum type; when a team uses OO DDD (Evans/Vernon) but wants to lean into the type system; when structuring an application service as an impureim sandwich, or asking how to keep the domain pure when a decision needs an external call (re-quote, re-price) partway through. Strong complement to `domain-driven-design`, `hexagonal-clean-architecture`, and `clean-code` — those handle the organizational and strategic side, this skill handles the type-encoding side.

Who uses this skill

The Domain Modeling Made Functional Claude Code skill is built for content creators, marketers, copywriters, SEO professionals, and editorial teams. It's part of ClaudSkills (also referred to as Claude Skills or Claude Code Skills) — the open community-curated registry of 196,000+ SKILL.md files for Anthropic's Claude Code agent and the wider Claude ecosystem (Claude API, Claude Agent SDK).

How to install

Free

Manual install (2 steps)

mkdir -p ~/.claude/skills/domain-modeling-made-functional
curl -L https://claudskills.com/skills/domain-modeling-made-functional/SKILL.md \
  -o ~/.claude/skills/domain-modeling-made-functional/SKILL.md

Or just download SKILL.md directly and drop it into ~/.claude/skills/domain-modeling-made-functional/. Claude Code auto-discovers it on next session.

Skills live at ~/.claude/skills/domain-modeling-made-functional/SKILL.md on macOS/Linux, or %USERPROFILE%\.claude\skills\domain-modeling-made-functional\SKILL.md on Windows. See the full install guide for step-by-step instructions.

Telegram

📱 Install from your phone or desktop Telegram

Open @claudskills_bot on Telegram, tap Open Desktop App, and the desktop app installs this skill for you. Or share the bot link with a colleague — they get the same one-tap install. Learn more →

Pro

One-click install via the desktop app

The ClaudSkills desktop app installs any skill directly into ~/.claude/skills/ with one click — no terminal required. Pro starts at $9/mo or $149 lifetime.

Pro

For the full experience including quality scoring and one-click install features for each skill — upgrade to Pro.

Frequently asked questions

How do I install the Domain Modeling Made Functional Claude Code skill?
Install via the ClaudSkills desktop app (one click) or copy SKILL.md from the source repository to ~/.claude/skills/domain-modeling-made-functional/SKILL.md and restart Claude Code. Both flows are detailed at claudskills.com/install/.
What does the Domain Modeling Made Functional skill do?
Apply Scott Wlaschin's "Domain Modeling Made Functional" (Pragmatic Bookshelf, 2018) — the functional rendering of domain-driven design. Covers making illegal states unrepresentable through algebraic data types, designing workflows as type signatures (Command → AsyncResult<Events, DomainError>), modeling errors as values via the three-track railroad (domain errors / infrastructure errors / panics), single-case wrappers for primitive obsession, choice-of-states for aggregates, DTO-to-domain translation at bounded-context edges, persistence ignorance via functional-core/imperative-shell, the impureim and Recawr (read-calculate-write) sandwich for structuring an application service as impure-pure-impure, dependency rejection and decoupling decisions from effects (the domain takes data and returns decisions/events rather than injecting dependencies), and workflow composition by chaining typed steps. Use when designing a new domain workflow / aggregate / API endpoint in a typed language (F#, Scala, Kotlin, TypeScript, C# with records + LanguageExt); when reviewing a domain model and asking whether its invariants are encoded in the type system vs in runtime guards; when refactoring exception-based domain code to errors-as-values; when explaining "make illegal states unrepresentable" or "workflows as type signatures"; when looking at a record bristling with `Option<>` and sibling-exclusive bools and wondering if it should be a sum type; when a team uses OO DDD (Evans/Vernon) but wants to lean into the type system; when structuring an application service as an impureim sandwich, or asking how to keep the domain pure when a decision needs an external call (re-quote, re-price) partway through. Strong complement to `domain-driven-design`, `hexagonal-clean-architecture`, and `clean-code` — those handle the organizational and strategic side, this skill handles the type-encoding side. Skip for dynamically-typed codebases (Python, Ruby, vanilla JS) where the techniques don't have a compiler to back them; for strategic-DDD questions about bounded contexts and ubiquitous language (use `domain-driven-design`); for pure OO pattern questions (use `solid-principles`, `responsibility-driven-design`).
Is this skill free to install?
Yes. ClaudSkills is an open registry — every skill keeps its source repository's license, and manual install via copy is free. ClaudSkills Pro ($9/mo, $79/yr, or $149 one-time) adds one-click install via the desktop app and a multi-signal Quality Score.
When should I use the Domain Modeling Made Functional skill?
Use Domain Modeling Made Functional when your Claude Code task falls under the Content category — specifically in the translation area. Claude Code auto-discovers installed skills and invokes the right one based on the task description, so you can also ask Claude directly (e.g. "use Domain Modeling Made Functional" or describe the task and let Claude pick). Browse related skills at /category/content/.
What is a Claude Code skill and how does the Domain Modeling Made Functional skill fit in?
A Claude Code skill is a SKILL.md file that lives under ~/.claude/skills/<name>/ and tells the Claude Code CLI agent how to perform a specific task (instructions, prompts, allowed tools). Skills are auto-discovered at session start. Domain Modeling Made Functional is one of 67,000+ skills indexed in the open ClaudSkills catalog, classified under the Content category. Learn more at /learn/what-is-a-claude-skill/.

Attribution & license

Cite this skill

If you reference this skill in a blog post, paper, or documentation, you can cite it as:

APA
vnovakovits. (2026). Domain Modeling Made Functional [Claude Code skill]. ClaudSkills. https://claudskills.com/skills/domain-modeling-made-functional/
BibTeX
@misc{domain-modeling-made-functional-2026,
  author    = {vnovakovits},
  title     = {Domain Modeling Made Functional [Claude Code skill]},
  year      = {2026},
  publisher = {ClaudSkills},
  url       = {https://claudskills.com/skills/domain-modeling-made-functional/}
}

Embed this skill

Promote, attribute, or link this skill from your own README, blog post, or documentation. All three snippets are free to use — no sign-up, no API key. More distribution surfaces →

Badge
[![ClaudSkills](https://claudskills.com/badge/domain-modeling-made-functional.svg)](https://claudskills.com/skills/domain-modeling-made-functional/?utm_source=badge&utm_medium=readme&utm_campaign=skill_badge)
<script>
<script src="https://claudskills.com/embed/domain-modeling-made-functional.js" async></script>
<iframe>
<iframe src="https://claudskills.com/embed/domain-modeling-made-functional.html" width="100%" height="160" frameborder="0" loading="lazy" title="ClaudSkills: Domain Modeling Made Functional"></iframe>

Security scan

Grade A · scanned 2026-09-28 — free static scan against the OWASP Agentic Skills Top 10.

No risk patterns were found in any of the ten OWASP-aligned categories. How grading works ›

Show this grade on your repo (click to copy):

[![Security: A](https://img.shields.io/badge/Security-A-2e7d32)](https://claudskills.com/skills/domain-modeling-made-functional/#security)

Free. No spam. Unsubscribe in one click.

More Content skills

Browse all Content skills in the ClaudSkills registry, or explore these other picks from the same category:

Browse all Content skills → Top 100 skills
Part of ClaudSkills — the open registry for Claude Skills & Claude Code Skills.  ·  What's New  ·  Install guide  ·  About  ·  llms.txt

Part of Acreator Store — Adam Lankamer's AI tools: PerfectStudio · Ucaption · UTagger · AutoXPoster · TestYourSkills · AutomationFlows · Au Naturel · Telegram @acreatorstore