Claude-skill-registry schema-patterns
Effect Schema conventions and patterns. Triggers on Schema class creation, tagged unions, enums, type guards, or test fixtures using Effect Schema.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/effect-schema-patterns" ~/.claude/skills/majiayu000-claude-skill-registry-schema-patterns && rm -rf "$T"
manifest:
skills/data/effect-schema-patterns/SKILL.mdsource content
Effect Schema Patterns
Class Instantiation
ALWAYS use
for creating instances:Schema.make()
// ✅ GOOD - Use Schema.make() const user = Schema.make(User)({ name: 'Alice', age: 30 }) // ❌ BAD - Manual construction const user = { _tag: 'User', name: 'Alice', age: 30 }
Type Guards
ALWAYS use
or static Schema.is()
method:.is
// ✅ GOOD if (Standard.is(value)) { ... } if (Schema.is(Standard)(value)) { ... } // ❌ BAD - manual _tag check if (value._tag === 'Standard') { ... }
Enums
ALWAYS inline enum values directly in
:Schema.Enums()
// ✅ GOOD - inline values, use .enums for runtime access export const Status = Schema.Enums({ active: 'active', inactive: 'inactive', }) export type Status = typeof Status.Type // Runtime: Status.enums.active // ❌ BAD - separate const object export const StatusValues = { active: 'active', inactive: 'inactive', } as const export const Status = Schema.Enums(StatusValues)
Key Points
- Use
for type-safe instantiationSchema.make() - Use
for type predicates, never manualSchema.is()
checks_tag - Inline enum values directly in
Schema.Enums() - Access runtime enum values via
property.enums