Agent Skills: Cats Focus + Monad

Cats Focus + Monad: Lawful composition for effect management

UncategorizedID: plurigrid/asi/cats-focus-monad

Install this agent skill to your local

pnpm dlx add-skill https://github.com/plurigrid/asi/tree/HEAD/skills/cats-focus-monad

Skill Files

Browse the full folder contents for cats-focus-monad.

Download Skill

Loading file tree…

skills/cats-focus-monad/SKILL.md

Skill Metadata

Name
cats-focus-monad
Description
"Cats Focus + Monad: Lawful composition for effect management"

Cats Focus + Monad

flatMap that shit

Core Laws

// Monad Laws
pure(a).flatMap(f) === f(a)                    // Left identity
fa.flatMap(pure) === fa                        // Right identity  
fa.flatMap(f).flatMap(g) === fa.flatMap(a => f(a).flatMap(g))  // Associativity

Focus (Monocle Optics)

import monocle.Focus
import monocle.syntax.all._

case class State(entropy: Long, archive: List[HyDefn])

// Lens into nested structure
val entropyLens = Focus[State](_.entropy)
val archiveLens = Focus[State](_.archive)

// Compose
state.focus(_.archive).modify(_ :+ newDefn)

Monad Composition Pattern

import cats.Monad
import cats.syntax.all._

def godelStep[F[_]: Monad](state: State): F[State] =
  for {
    entropy  <- nextEntropy[F](state.entropy)
    hydefn   <- generateHyDefn[F](entropy)
    proven   <- attemptProof[F](hydefn)
    newState <- if (proven) 
                  Monad[F].pure(state.focus(_.archive).modify(_ :+ hydefn))
                else 
                  Monad[F].pure(state)
  } yield newState

GF(3) Trit

cats-focus-monad (0) ⊕ cats-effect (+1) ⊕ validation (-1) = 0 ✓

Commands

# Add to build.sbt
libraryDependencies ++= Seq(
  "org.typelevel" %% "cats-core" % "2.13.0",
  "dev.optics" %% "monocle-core" % "3.3.0",
  "dev.optics" %% "monocle-macro" % "3.3.0"
)

Autopoietic Marginalia

The interaction IS the skill improving itself.

Every use of this skill is an opportunity for worlding:

  • MEMORY (-1): Record what was learned
  • REMEMBERING (0): Connect patterns to other skills
  • WORLDING (+1): Evolve the skill based on use

Add Interaction Exemplars here as the skill is used.