From e9f249fe7fc9087c667ea9a6b939a48007a2daa0 Mon Sep 17 00:00:00 2001 From: Adam Jeniski Date: Fri, 30 Jan 2026 09:46:05 -1000 Subject: [PATCH] Delete plan.md --- plan.md | 84 --------------------------------------------------------- 1 file changed, 84 deletions(-) delete mode 100644 plan.md diff --git a/plan.md b/plan.md deleted file mode 100644 index 016dae0..0000000 --- a/plan.md +++ /dev/null @@ -1,84 +0,0 @@ -# Clojure-Typst: A Clojure-style Lisp for Typst - -## The Problem - -Typst is a modern typesetting system with a nice programming language, but it's not a Lisp. We only like Lisps. - -## The Vision - -Create a Clojure-inspired Lisp that compiles to Typst, bringing: -- S-expression syntax -- Functional programming idioms -- Macros and metaprogramming -- Immutable-first data structures -- REPL-driven development (maybe?) - -## Open Questions - -### Syntax & Semantics -- [ ] How closely do we follow Clojure syntax? -- [ ] What Typst constructs map to Lisp naturally? -- [ ] How do we handle Typst's content mode vs code mode distinction? -- [ ] Do we support Clojure-style destructuring? -- [ ] What about namespaces/modules? - -### Data Structures -- [ ] Vectors `[]`, maps `{}`, sets `#{}`? -- [ ] How do these map to Typst arrays and dictionaries? -- [ ] Lazy sequences - possible in Typst? - -### Interop -- [ ] How do we call Typst functions from our Lisp? -- [ ] How do we emit Typst content/markup? -- [ ] Can we import Typst packages? - -### Implementation -- [ ] What language for the compiler? (Clojure? Rust? Typst itself?) -- [ ] AST representation -- [ ] Compilation strategy (source-to-source? interpreter?) -- [ ] Error messages and source maps - -## Typst Features to Leverage - -- Functions are first-class -- Has closures -- Pattern matching in function args -- Content as a first-class type -- Scripting mode `#` vs content mode - -## Example Syntax Ideas - -```clojure -; Define a function -(defn greet [name] - (str "Hello, " name "!")) - -; Emit typst content -(content - (heading "My Document") - (greet "World")) - -; Maybe something like hiccup for content? -[:heading {:level 1} "My Document"] -["Hello, " [:strong "World"] "!"] -``` - -## Next Steps - -1. Study Typst's language semantics more deeply -2. Identify the minimal viable feature set -3. Decide on implementation language -4. Build a basic parser for s-expressions -5. Implement core special forms (def, fn, let, if, do) -6. Add Typst content emission -7. Iterate - -## Resources - -- [Typst Documentation](https://typst.app/docs) -- [Clojure Reference](https://clojure.org/reference) -- [Make a Lisp](https://github.com/kanaka/mal) - -## Notes - -(Add brainstorming notes here)