Best use case
free-monad-gen is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Free Monad Generation Skill (PLUS +1)
Teams using free-monad-gen should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/free-monad-gen/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How free-monad-gen Compares
| Feature / Agent | free-monad-gen | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Free Monad Generation Skill (PLUS +1)
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Free Monad Generation Skill (PLUS +1)
> Free structure generation from signatures
**Trit**: +1 (PLUS)
**Color**: #D82626 (Red)
**Role**: Generator/Creator
## Core Concept
Free monads generate structure from a functor signature:
```haskell
data Free f a
= Pure a -- Leaf (return)
| Roll (f (Free f a)) -- Node (bind)
```
**Universal property**: `Free f` is left adjoint to forgetful functor U.
## Dual: Cofree Comonad
```haskell
data Cofree f a = a :< f (Cofree f a)
-- Head (extract) and infinite tail (duplicate)
```
| Free | Cofree |
|------|--------|
| Producer (effects) | Consumer (contexts) |
| Programs | Interpreters |
| Syntax | Semantics |
## Pattern Runs on Matter
```
Pattern (Free) ────runs-on────→ Matter (Cofree)
↓ ↑
Program Environment
↓ ↑
Effects Handlers
```
## Integration with Gay.jl
```julia
# Free monad for color stream generation
struct ColorFree{A}
tag::Symbol # :pure or :roll
value::Union{A, Tuple{UInt64, ColorFree{A}}}
end
# Generate free color structure
function free_color_stream(seed::UInt64, n::Int)
if n == 0
ColorFree(:pure, seed)
else
next_seed = splitmix64(seed)
ColorFree(:roll, (seed, free_color_stream(next_seed, n-1)))
end
end
# Interpret to actual colors
function interpret(free::ColorFree, palette)
if free.tag == :pure
return []
else
(seed, rest) = free.value
color = gay_color(seed)
[color; interpret(rest, palette)]
end
end
```
## Freer Monad (More Efficient)
```haskell
data Freer f a where
Pure :: a -> Freer f a
Impure :: f x -> (x -> Freer f a) -> Freer f a
```
Benefits:
- O(1) bind (vs O(n) for Free)
- Existential continuation
- Better for effect systems
## DSL Generation Pattern
```haskell
-- 1. Define signature functor
data MusicF next
= Note Pitch Duration next
| Rest Duration next
| Chord [Pitch] Duration next
| Par (Free MusicF ()) (Free MusicF ()) next
-- 2. Free monad gives DSL
type Music = Free MusicF
-- 3. Smart constructors
note :: Pitch -> Duration -> Music ()
note p d = liftF (Note p d ())
-- 4. Programs are data
melody = do
note C4 quarter
note E4 quarter
note G4 half
```
## GF(3) Triads
```
sheaf-cohomology (-1) ⊗ kan-extensions (0) ⊗ free-monad-gen (+1) = 0 ✓
temporal-coalgebra (-1) ⊗ dialectica (0) ⊗ free-monad-gen (+1) = 0 ✓
three-match (-1) ⊗ unworld (0) ⊗ free-monad-gen (+1) = 0 ✓
```
## Commands
```bash
# Generate free structure from signature
just free-gen MusicF
# Interpret free structure
just free-interpret music.free synth
# Generate color stream
just free-color-stream $GAY_SEED 100
# Lift effect to free monad
just free-lift effect
```
## Effect System Integration
```haskell
-- Algebraic effects as free monads
data Effect =
| State s
| Reader r
| Writer w
| Async
| Error e
type Eff effs = Freer (Union effs)
-- Handlers interpret effects
runState :: s -> Eff (State s ': effs) a -> Eff effs (a, s)
```
## References
- Swierstra, "Data Types à la Carte"
- Kiselyov & Ishii, "Freer Monads, More Extensible Effects"
- Capriotti & Kaposi, "Free Applicatives"Related Skills
zx-calculus
Coecke's ZX-calculus for quantum circuit reasoning via string diagrams with Z-spiders (green) and X-spiders (red)
zulip-cogen
Zulip Cogen Skill 🐸⚡
zls-integration
zls-integration skill
zig
zig skill
zig-syrup-bci
Multimodal BCI pipeline in Zig: DSI-24 EEG, fNIRS mBLL, eye tracking IVT, LSL sync, EDF read/write, GF(3) conservation
zig-programming
zig-programming skill
zeroth-bot
Zeroth Bot - 3D-printed open-source humanoid robot platform for sim-to-real and RL research. Affordable entry point for humanoid robotics.
xlsx
Comprehensive spreadsheet creation, editing, and analysis with support
wycheproof
Google's Wycheproof test vectors for cryptographic implementation testing.
Writing Hookify Rules
This skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
worldmat-tidar
worldmat-tidar
worlding
Gay.jl world_ pattern: persistent composable state builders with GF(3) conservation, Möbius invertibility, and Narya verification