fp-design

Guide functional-programming design decisions by brainstorming or critiquing designs.

1|Updated Jul 31, 2023
One-click install
npx skills add https://github.com/austintheriot/dotfiles --skill fp-design
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: fp-design
Source: https://github.com/austintheriot/dotfiles/tree/main/.claude/skills/fp-design
Command: npx skills add https://github.com/austintheriot/dotfiles --skill fp-design

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

It helps you make better design decisions by analyzing the same problem through a functional-programming lens, surfacing type, effect, and invariants tradeoffs before you commit to an implementation.

Core Features & Use Cases

  • Brainstorm mode: explore what a functional approach to a problem would look like, spanning data modeling (ADTs), effect boundaries, and composition strategy.
  • Critique mode: review an existing proposed design for illegal states, missing exhaustiveness, misplaced effects, weak error handling, and FP overreach or under-reach.
  • Dual-output guidance: produce an “elegant FP” design direction plus a pragmatic recommendation that matches language and team context, including explicit tradeoffs.

Quick Start

Ask for a design review by saying: "Critique this design from a functional-programming perspective and give both the elegant FP option and the pragmatic recommendation with tradeoffs."

Frequently Asked Questions about fp-design

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I design software architecture using functional programming principles?

Designing software architecture using functional programming principles involves modeling domains with ADTs, structuring effect and purity boundaries, and designing concurrency to surface type invariants before implementation. It produces design docs or critiques without writing code, explicitly naming tradeoffs.

What is the best way to critique a proposed design for illegal states and missing exhaustiveness?

Critiquing a proposed design for illegal states and missing exhaustiveness requires reviewing type and state-machine invariants from a functional-programming perspective. It identifies misplaced effects, weak error handling, and FP over-reach or under-reach, outputting both elegant and pragmatic recommendations.

Can I use functional programming design patterns across different languages?

Yes, functional programming design patterns apply across different languages by reviewing type and state-machine invariants universally. The approach provides dual-output guidance: an elegant FP design direction plus a pragmatic recommendation specifically tailored to match your language and team context.

How do I model domain data with algebraic data types (ADTs)?

Modeling domain data with algebraic data types (ADTs) involves structuring your data modeling strategy during brainstorming mode to explore functional approaches. This process evaluates effect boundaries and composition strategies to ensure type safety and eliminate illegal states before committing.

When should I not use a strict functional programming approach for my software design?

You should avoid a strict functional programming approach when the tradeoffs outweigh team context or language constraints. The critique explicitly contrasts an elegant FP option with a pragmatic recommendation, identifying FP over-reach where strict purity creates unnecessary friction in your environment.

Does fp-design write implementation code for functional programming architectures?

No, fp-design does not write implementation code for functional programming architectures. It focuses strictly on design decisions by producing design docs or critiques that analyze effect boundaries, ADT modeling, and concurrency tradeoffs without generating the actual source code.