macos-programmer
macOS-specific development patterns, platform APIs, and decision frameworks. Use when developing Mac apps, macOS applications, Cocoa/AppKit code, or making…
Functional programming principles, patterns, and practices. Use when working with functional languages (Racket, Clojure, Erlang, Haskell, Idris, Scheme, OCaml, F#, Elixir, etc.) without language-specific skills available, or when applying functional paradigms in multi-paradigm
$ npx -y skills add Pyroxin/opinionated-claude-skills --skill functional-programmer --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/functional-programmerContext preview
The summary Claude sees to decide when to auto-load this skill.
Functional programming principles, patterns, and practices. Use when working with functional languages (Racket, Clojure, Erlang, Haskell, Idris, Scheme, OCaml, F#, Elixir, etc.) without language-specific skills available, or when applying functional paradigms in multi-paradigm
name: functional-programmer description: Functional programming principles, patterns, and practices. Use when working with functional languages (Racket, Clojure, Erlang, Haskell, Idris, Scheme, OCaml, F#, Elixir, etc.) without language-specific skills available, or when applying functional paradigms in multi-paradigm languages.
This skill provides guidance on functional programming principles, patterns, and practices. Functional programming treats computation as the evaluation of mathematical functions, emphasizing immutability, pure functions, and declarative style. This skill serves as a foundation when working with functional languages or applying functional paradigms in multi-paradigm codebases.
Use this skill when:
**Note:** Language-specific skills (e.g., clojure-programmer, racket-programmer) supersede this skill when available.
Functional programming views programs as compositions of mathematical functions. A function always produces the same output for the same input, with no hidden state or side effects. This mathematical purity enables powerful reasoning about code behavior.
**Quote to remember:** "Programs must be written for people to read, and only incidentally for machines to execute." — Harold Abelson, SICP
Rather than modifying data in place, functional programming creates new data structures through transformation. This immutability enables:
Build complex behavior by composing simple functions. Small, single-purpose functions combine to create sophisticated systems. Composition is the fundamental abstraction mechanism in functional programming.
Data structures cannot be modified after creation. Instead, transformations produce new structures. This makes time and change explicit rather than hidden.
**Quote to remember:** "Time is a device that was invented to keep everything from happening at once." — Ray Cummings (1922), often misattributed
**Why immutability matters:**
**Implementation:** Persistent data structures with structural sharing, copy-on-write, or immutable-by-convention.
Pure functions always return the same output for the same input, with no side effects. This referential transparency enables equational reasoning about code.
**Why purity matters:**
**Managing effects:** Push side effects to program boundaries. Separate pure core logic from effectful actions. Use effect systems when appropriate.
Functions as values enable abstracting over patterns, not just data. This is more powerful than data abstraction alone.
**Why higher-order functions matter:**
Express *what* to compute, not *how*. Describe desired results rather than step-by-step procedures. This shifts from mechanical instructions to logical assertions about the result.
**Why declarative style matters:**
<fp_decision_framework>
From the software-engineer skill, use functional approaches when:
**Key principles:**
<paradigm_decision_table>
| Situation | FP Strength | Consider Alternative When | |-----------|-------------|---------------------------| | Data pipelines | Composition, immutability | Complex branching logic needed | | Concurrent systems | No shared mutable state | Inherently stateful (games, GUIs) | | Correctness-critical | Equational reasoning, testing | Performance-critical tight loops | | Reusable operations | Higher-order functions | Team unfamiliar with FP | | Domain modeling | ADTs, pattern matching | Extensible data (expression problem) | | Parsing/transformation | Declarative specification | Complex imperative protocols | | Mathematical computation | Pure functions match math | I/O-heavy applications | </paradigm_decision_table> </fp_decision_framework>
<fp_thinking_patterns>
<data_transformation>
Prefer expressing operation
This project descends from the personal prompts I'd been keeping for Claude Code prior to the release of skills and plugins. Over time it's also evolved into a sandbox where I figure out what makes Claude reliably good at a task, and find prompts that work.
macOS-specific development patterns, platform APIs, and decision frameworks. Use when developing Mac apps, macOS applications, Cocoa/AppKit code, or making…
Swift-specific idioms, tooling, and philosophy for both application development and command-line scripting. Use when working with Swift code, including Swift…
Fish shell scripting judgment frameworks and critical idioms. Use when writing Fish scripts or shell automation. Focuses on when to use Fish vs bash,…
Java-specific tooling, documentation standards, testing practices, and modern idioms. Use when working with Java code or Java-based projects on the JVM.
Clojure-specific philosophy, idioms, and judgment frameworks. Use when working with Clojure code. Emphasizes data-oriented design, runtime validation with…
Racket-specific tooling, libraries, idioms, and language-oriented programming philosophy. Use when working with Racket code. Emphasizes LOP, contracts, macros,…