haskell-diagrams - Declarative Vector Graphics with Diagrams DSL
Integrates the Haskell diagrams embedded domain-specific language for creating declarative vector graphics. Used for:
Trit: +1 (PLUS) - Generates vector graphics artifacts
-- Diagrams is a monoid: composition via <>
diagram :: Diagram B
diagram = shape1 <> shape2 `atop` shape3
-- Transformation pipeline
transform :: Diagram B -> Diagram B
transform = scale 2 . rotate (45 @@ deg) . fc red
| Predicate | Description | GF(3) Role |
|-----------|-------------|------------|
| DiagramValid(d) | Diagram is well-formed | Structure |
| ColorConserved(ds) | Σ trits = 0 across diagrams | Conservation |
| PathEquivalent(p1,p2) | Visual fingerprints match | Equivalence |
| GoldenAngle(θ) | θ ≈ 137.508° | Dispersion |
┌────────────────────────────────────────────────────────────────┐
│ Haskell Diagrams Pipeline │
├────────────────────────────────────────────────────────────────┤
│ │
│ Source (.hs) Diagram B Output │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌───────────────────┐ ┌─────────────┐ │
│ │ DSL Code │───▶│ Monoid Compose │───▶│ SVG / PNG │ │
│ │ shapes, │ │ atop, beside, │ │ PDF / PS │ │
│ │ colors │ │ vsep, hsep │ │ Canvas │ │
│ └──────────┘ └───────────────────┘ └─────────────┘ │
│ │
│ Backends: -fsvg (default), -fcairo, -frasterific, -fcanvas │
│ │
└────────────────────────────────────────────────────────────────┘
# Diagrams Generation Bundle
three-match (-1) ⊗ haskell-diagrams (0) ⊗ gay-mcp (+1) = 0 ✓ [Core Diagrams]
temporal-coalgebra (-1) ⊗ haskell-diagrams (0) ⊗ topos-generate (+1) = 0 ✓ [Animation]
sheaf-cohomology (-1) ⊗ haskell-diagrams (0) ⊗ rubato-composer (+1) = 0 ✓ [Music Notation]
persistent-homology (-1) ⊗ haskell-diagrams (0) ⊗ gay-mcp (+1) = 0 ✓ [TDA Viz]
# Install with SVG backend (default)
cabal update && cabal install --lib diagrams diagrams-svg diagrams-contrib
# With cairo backend for PNG/PDF
cabal install gtk2hs-buildtools
cabal install --lib -fcairo diagrams
# With rasterific for Haskell-native PNG
cabal install --lib -frasterific diagrams
import Diagrams.Prelude
-- Basic shapes
circle 1 :: Diagram B
square 2 :: Diagram B
rect 3 4 :: Diagram B
triangle 1 :: Diagram B
pentagon 1 :: Diagram B
-- Paths and trails
fromVertices [p2 (0,0), p2 (1,1), p2 (2,0)]
arc (0 @@ deg) (90 @@ deg)
-- Monoid: overlay at origin
d1 <> d2
-- Explicit overlay
d1 `atop` d2
-- Spatial arrangement
d1 ||| d2 -- beside horizontally
d1 === d2 -- beside vertically
hcat [d1, d2, d3] -- horizontal list
vcat [d1, d2, d3] -- vertical list
hsep 0.5 [d1, d2] -- with spacing
vsep 0.5 [d1, d2]
-- Fill and stroke
diagram # fc red -- fill color
diagram # lc blue -- line color
diagram # lw thick -- line width
diagram # opacity 0.5
-- Transforms
diagram # scale 2
diagram # rotate (45 @@ deg)
diagram # translate (r2 (1, 2))
import Data.Colour.SRGB (sRGB24read)
-- Golden thread colors (seed 1069)
goldenThreadColors :: [Colour Double]
goldenThreadColors = map sRGB24read
[ "#DD3C3C", "#3CDD6B", "#9A3CDD" -- steps 1-3
, "#DDC93C", "#3CC2DD", "#DD3C93" -- steps 4-6
, "#64DD3C", "#433CDD", "#DD723C" -- steps 7-9
]
-- GF(3) trit colors
tritColor :: Trit -> Colour Double
tritColor Minus = sRGB24read "#2626D8" -- Blue (validator)
tritColor Zero = sRGB24read "#26D826" -- Green (coordinator)
tritColor Plus = sRGB24read "#D82626" -- Red (generator)
-- Cell state visualization
data CellState = Empty | Vortex | Antivortex | Path0 | Path1 | Path2
cell :: CellState -> Diagram B
cell Empty = square 1 # fc white # lw thin
cell Vortex = circle 0.35 # fc vortexColor <> square 1 # lw thin
cell Antivortex = circle 0.35 # fc antivortexColor <> square 1 # lw thin
cell Path0 = square 0.6 # fc path0Color <> square 1 # lw thin
cell Path1 = square 0.6 # fc path1Color <> square 1 # lw thin
cell Path2 = circle 0.3 # fc path2Color <> square 1 # lw thin
-- 8x8 lattice grid
latticeGrid :: [[CellState]] -> Diagram B
latticeGrid rows = vcat $ map (hcat . map cell) rows
-- Main diagram with legend
tsillersonDiagram :: Diagram B
tsillersonDiagram = vsep 0.5
[ titleBlock
, hsep 1 [latticeGrid initialLattice, legend]
, goldenThreadBar
] # bg white # frame 0.5
import Diagrams.Backend.Cairo.CmdLine
import Diagrams.Animation
-- Animated diagram (t ∈ [0, 1])
spinningSquare :: Animation B V2 Double
spinningSquare = animEnvelope $ \t ->
square 1 # rotate (t * 360 @@ deg) # fc (blend t red blue)
-- Render as GIF
main = mainWith spinningSquare
just diagrams-install # Install diagrams library
just diagrams-tsillerson # Generate Tsillerson SVG
just diagrams-list # List Haskell diagram files
just kbg-diagram-hs # Generate KBG third diagram
lib/
├── TsillersonDiagram.hs # 2+1D automata visualization
├── GoldenThread.hs # φ-spiral color generation
└── PathEquivalence.hs # Kleppmann-Bumpus-Gay comparison
diagrams/
├── tsillerson.svg # Generated Tsillerson diagram
├── golden_thread.svg # Golden angle color spiral
└── path_equiv.svg # Path equivalence visualization
| Position | Skill | Role |
|----------|-------|------|
| Left (-1) | three-match | Validates diagram constraints |
| Right (+1) | gay-mcp | Provides deterministic colors |
Status: ✅ L4 Admissible Trit: 0 (ERGODIC) - Coordinates graphics generation Date: 2025-12-25
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer