502
GitHub Stars
1
Bundled Files
2 months ago
Catalog Refreshed
4 months ago
First Indexed
Readme & install
Copy the install command, review bundled files from the catalogue, and read any extended description pulled from the listing source.
Installation
Preview and clipboard use veilstrat where the catalogue uses aiagentskills.
npx veilstrat add skill citypaul/.dotfiles --skill functional- SKILL.md17.1 KB
Overview
This skill codifies pragmatic functional programming patterns focused on immutable data and pure functions. It offers guidance for writing predictable, testable, and composable logic without heavy FP abstractions. Use it to shape transformation logic, APIs, and domain code toward clarity and safety.
How this skill works
The skill inspects code and design choices to enforce immutable updates, prefer pure functions, and favor composition and array methods over imperative loops. It recommends using options objects for multi-parameter functions, readonly types where available, and isolating impurity at system boundaries. It also suggests concrete refactors: small named functions, early returns, and limited nesting depth.
When to use it
- Writing data transformations or business logic
- Refactoring mutable code to predictable, testable functions
- Designing public APIs and library primitives
- Preparing code for concurrent or React-based environments
- Teaching or documenting team-level coding standards
Best practices
- Prefer pure functions; isolate I/O and side effects at the edges
- Never mutate inputs—return new objects/arrays instead of modifying existing ones
- Use array methods (map, filter, reduce) for declarative transformations
- Favor options objects for functions with many or optional parameters
- Limit nesting to two levels; extract descriptive helper functions
- Annotate intent with readonly (or equivalent) to communicate immutability
Example use cases
- Convert imperative loops that mutate state into chained array transforms (map → filter → reduce)
- Refactor a function that mutates objects into one that returns a new object using spread or structural updates
- Design a public API that accepts a single options object for clarity and future extension
- Isolate side effects: keep calculation functions pure and put persistence in small adapter functions
- Simplify complex validation by composing small validators and a final registration step
FAQ
Mutation is acceptable only at isolated boundaries for performance or necessary side effects. Keep the core domain pure and confine mutations to adapters or I/O layers.
Are heavy FP libraries recommended?
No. Prefer lightweight, readable patterns. Avoid heavy abstractions like monads or large FP libraries unless the team is experienced and the complexity is warranted.
What if code needs comments?
If you need comments to explain behavior, refactor: extract well-named functions, use meaningful types, or add concise JSDoc for public API contracts only.