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.md
source content

Effect Schema Patterns

Class Instantiation

ALWAYS use

Schema.make()
for creating instances:

// ✅ 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

Schema.is()
or static
.is
method:

// ✅ 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
    Schema.make()
    for type-safe instantiation
  • Use
    Schema.is()
    for type predicates, never manual
    _tag
    checks
  • Inline enum values directly in
    Schema.Enums()
  • Access runtime enum values via
    .enums
    property