From d0fe89c8ddac1343793a898e47778131a27be337 Mon Sep 17 00:00:00 2001 From: Arnaud Spiwack Date: Thu, 8 Jan 2026 17:10:36 +0900 Subject: [PATCH 1/3] Link to the published version of the paper --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index df57273..a8c1f73 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ But the Pup descriptor can pretty-print in addition to parse. ## Some underlying principles -Our article _Invertible Syntax without the Tuples_ (published version (TBA), +Our article _Invertible Syntax without the Tuples_ ([published version][paper], [extended version with appendices][paper-extended]) goes over a lot of the design decisions which went into the Pup library, in particular how it compares with previous approaches. @@ -72,6 +72,7 @@ Now you know. [functional-unparsing-paper]: https://www.cambridge.org/core/journals/journal-of-functional-programming/article/functional-unparsing/789945109AD2AB168B504472E6B786A0 [Cassette]: https://github.com/mboes/cassette/ +[paper]: https://dl.acm.org/doi/10.1145/3759427.3760381 [paper-extended]: https://arxiv.org/abs/2508.09856 [Megaparsec]: https://hackage.haskell.org/package/megaparsec [Prettyprinter]: https://hackage.haskell.org/package/prettyprinter From 524b6774dff5fc21cee96fa2cf69a5c6c88d1beb Mon Sep 17 00:00:00 2001 From: Arnaud Spiwack Date: Thu, 8 Jan 2026 17:17:50 +0900 Subject: [PATCH 2/3] Link to the blog post --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a8c1f73..c04e3ea 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,8 @@ A Pup format descriptor for the same type could look like <|> #D <* chunk "D" <* space1 <*> anySingle <* space1 <*> bool <* space1 <*> int ``` -But the Pup descriptor can pretty-print in addition to parse. +But the Pup descriptor can pretty-print in addition to parse. See also [our +introductory blog post][blog-post]. ## Some underlying principles @@ -72,6 +73,7 @@ Now you know. [functional-unparsing-paper]: https://www.cambridge.org/core/journals/journal-of-functional-programming/article/functional-unparsing/789945109AD2AB168B504472E6B786A0 [Cassette]: https://github.com/mboes/cassette/ +[blog-post]: https://www.tweag.io/blog/2026-01-08-grammar-combinators/ [paper]: https://dl.acm.org/doi/10.1145/3759427.3760381 [paper-extended]: https://arxiv.org/abs/2508.09856 [Megaparsec]: https://hackage.haskell.org/package/megaparsec From c42d5fd67043903a11eee9fc8d06b9387468a4a9 Mon Sep 17 00:00:00 2001 From: Arnaud Spiwack Date: Thu, 8 Jan 2026 17:17:57 +0900 Subject: [PATCH 3/3] Cut v0.1.1 --- package.yaml | 2 +- pup.cabal | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.yaml b/package.yaml index 945fe6d..91caa83 100644 --- a/package.yaml +++ b/package.yaml @@ -1,7 +1,7 @@ spec-version: 0.36.0 name: pup -version: 0.1.0 +version: 0.1.1 synopsis: "Invertible format descriptors" description: "Please see README.md." author: ["Arnaud Spiwack"] diff --git a/pup.cabal b/pup.cabal index 7c43a67..7f4e9f3 100644 --- a/pup.cabal +++ b/pup.cabal @@ -5,7 +5,7 @@ cabal-version: 1.12 -- see: https://github.com/sol/hpack name: pup -version: 0.1.0 +version: 0.1.1 synopsis: Invertible format descriptors description: Please see README.md. homepage: https://github.com/tweag/pup#readme