- Casket-SSG (Haskell) - Generates static HTML from Markdown
- Runs once during deployment
- Pure functional, predictable output
- ReScript - Type-safe JavaScript compilation
- ReScript-TEA - The Elm Architecture for predictable state management
- Cadre-TEA-Router - Type-safe client-side routing
-
k9-svc - Self-Validating Components
- Validates form inputs
- Proves unsubscribe links work before sending
- Runtime invariant checking
-
a2ml - Attested Markup Language
- Typed, verifiable consent proofs
- Cryptographic timestamping
- Content with mathematical guarantees
-
proven (Idris2) - Formally Verified Operations
- SafeString - String operations that can't crash
- SafeUrl - URL parsing with proofs
- SafeHtml - Safe HTML generation
- All operations mathematically proven correct
User Request
↓
Casket (Haskell) → Static HTML
↓
Browser Loads Page
↓
ReScript-TEA Initializes
↓
User Interaction (click demo)
↓
TEA Update (pure state transition)
↓
k9-svc Validates (proves correctness)
↓
a2ml Generates Proof (cryptographic)
↓
proven Ensures Safety (Idris2 proofs)
↓
DOM Updated (ReScript)
- ✅ Keeps Haskell for what it does best: pure transformations
- ✅ Perfect for static site generation
- ✅ Not destroyed or replaced - enhanced!
- ✅ Type safety for client-side code
- ✅ Predictable state management
- ✅ Model-Update-View pattern
- ✅ Compile-time guarantees
- ✅ Components prove their own correctness
- ✅ Runtime validation with proofs
- ✅ Used where relevant (form validation, link checking)
- ✅ Typed markup for consent proofs
- ✅ Verifiable content
- ✅ Used where relevant (cryptographic proofs)
- ✅ Mathematical proofs of correctness
- ✅ Operations that cannot crash
- ✅ Used for super-robust critical paths
- ✅ SafeUrl, SafeString, SafeHtml modules
// Can crash, no guarantees
document.querySelector('.stat-card').style.opacity = '1'// Type-safe, compile-time checked
let update = (model, msg) =>
switch msg {
| ShowStats => {...model, statsVisible: true}
}// Component proves it maintains invariants
(k9-svc-check unsubscribe-link
(response-code 200)
(response-time < 200ms)
(proof validated))// Typed, verifiable proof
(proof consent
(action subscribe)
(timestamp verified)
(type explicit))-- Operations that cannot crash (Idris2)
parseUrl : String -> Either ProofOfError (Url, ProofOfValid)- ✅ Haskell (Casket) - Still generates static HTML
- ✅ ReScript - Adds type safety on top
- ✅ TEA - Adds state management on top
- ✅ k9-svc - Adds validation where relevant
- ✅ a2ml - Adds typed proofs where relevant
- ✅ proven - Adds formal verification for critical operations
Each layer complements the others. Nothing is destroyed!