diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,10 +5,26 @@
 The format is based on [Keep a Changelog 1.1](https://keepachangelog.com/en/1.1.0/),
 and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/).
 
-## [0.0.1.0] -
+## [0.0.2.0] - 2026-08-04
 
 ### Added
 
+- Cabal flag `lint`, which (when disabled, as is the default) allows the
+  dependency graph to be pruned, potentially avoiding solver & compilation
+  issues.
+
+### Fixed
+
+- `no-recursion` is no longer a dependency by default (thanks to the
+  aforementioned `lint` change).
+
+## [0.0.1.0] - 2025-11-17
+
+### Added
+
 - initial release of this package
 
-[0.1.0.0]: https://github.com/sellout/duoids/releases/tag/v0..0.1.0
+<!-- NB: The version on the left is the Haskell package version (PVP), the version on the right is the repo (tag) version (SemVer). Their only relationship is that a change of any severity on the left implies a change of at least that severity on the right. -->
+
+[0.0.2.0]: https://github.com/sellout/duoids/compare/v0.1.0...v1.0.0
+[0.0.1.0]: https://github.com/sellout/duoids/releases/tag/v0.1.0
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -3,9 +3,7 @@
 [![Packaging status](https://repology.org/badge/tiny-repos/haskell:duoids.svg)](https://repology.org/project/haskell:duoids/versions)
 [![latest packaged versions](https://repology.org/badge/latest-versions/haskell:duoids.svg)](https://repology.org/project/haskell:duoids/versions)
 
-Unifying parallel and sequential operations
-
-Duoids relate a pair of monoids, where one can be seen as “parallel” and the other “sequential”.
+Tools to help test your [duoids](https://hackage.haskell.org/package/duoids) usage.
 
 ## usage
 
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -7,7 +7,6 @@
 -- Warns even when `Unsafe` is explicit, not inferred. See
 -- https://gitlab.haskell.org/ghc/ghc/-/issues/16689
 {-# OPTIONS_GHC -Wno-unsafe #-}
-{-# OPTIONS_GHC -fplugin=NoRecursion #-}
 
 module Main (main) where
 
diff --git a/docs/license-report.md b/docs/license-report.md
--- a/docs/license-report.md
+++ b/docs/license-report.md
@@ -9,48 +9,49 @@
 | Name | Version | [SPDX](https://spdx.org/licenses/) License Id | Description | Also depended upon by |
 | --- | --- | --- | --- | --- |
 | **`base`** | [`4.20.0.0`](http://hackage.haskell.org/package/base-4.20.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/base-4.20.0.0/src/LICENSE) | Core data structures and operations | *(core library)* |
-| `duoids` | [`0.0.1.0`](http://hackage.haskell.org/package/duoids-0.0.1.0) |  *MISSING* | *MISSING* |  |
+| `duoids` | [`0.1.0.0`](http://hackage.haskell.org/package/duoids-0.1.0.0) |  *MISSING* | *MISSING* |  |
 | `hedgehog` | [`1.7`](http://hackage.haskell.org/package/hedgehog-1.7) | [`BSD-3-Clause`](http://hackage.haskell.org/package/hedgehog-1.7/src/LICENSE) | Release with confidence. |  |
-| `no-recursion` | [`0.3.0.0`](http://hackage.haskell.org/package/no-recursion-0.3.0.0) | [`(AGPL-3.0-only WITH Universal-FOSS-exception-1.0 OR AGPL-3.0-only OR LicenseRef-commercial)`](http://hackage.haskell.org/package/no-recursion-0.3.0.0/src/LICENSE) | A GHC plugin to remove support for recursion | `duoids` |
+| `no-recursion` | [`0.4.0.1`](http://hackage.haskell.org/package/no-recursion-0.4.0.1) | [`(AGPL-3.0-only WITH Universal-FOSS-exception-1.0 OR LicenseRef-proprietary)`](http://hackage.haskell.org/package/no-recursion-0.4.0.1/src/LICENSE) | A GHC plugin to remove support for recursion | `duoids` |
 
 ## Indirect transitive dependencies
 
 | Name | Version | [SPDX](https://spdx.org/licenses/) License Id | Description | Depended upon by |
 | --- | --- | --- | --- | --- |
-| `ansi-terminal` | [`1.1.3`](http://hackage.haskell.org/package/ansi-terminal-1.1.3) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ansi-terminal-1.1.3/src/LICENSE) | Simple ANSI terminal support | `concurrent-output`, `hedgehog` |
+| `ansi-terminal` | [`1.1.5`](http://hackage.haskell.org/package/ansi-terminal-1.1.5) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ansi-terminal-1.1.5/src/LICENSE) | Simple ANSI terminal support | `concurrent-output`, `hedgehog` |
 | `ansi-terminal-types` | [`1.1.3`](http://hackage.haskell.org/package/ansi-terminal-types-1.1.3) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ansi-terminal-types-1.1.3/src/LICENSE) | Types and functions used to represent SGR aspects | `ansi-terminal` |
 | **`array`** | [`0.5.7.0`](http://hackage.haskell.org/package/array-0.5.7.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/array-0.5.7.0/src/LICENSE) | Mutable and immutable arrays | `binary`, `containers`, `deepseq`, `ghc`, `ghci`, `pretty-show`, `stm`, `text` |
-| `async` | [`2.2.5`](http://hackage.haskell.org/package/async-2.2.5) | [`BSD-3-Clause`](http://hackage.haskell.org/package/async-2.2.5/src/LICENSE) | Run IO operations asynchronously and wait for their results | `concurrent-output`, `hedgehog`, `lifted-async` |
+| `async` | [`2.2.6`](http://hackage.haskell.org/package/async-2.2.6) | [`BSD-3-Clause`](http://hackage.haskell.org/package/async-2.2.6/src/LICENSE) | Run IO operations asynchronously and wait for their results | `concurrent-output`, `hedgehog`, `lifted-async` |
 | `barbies` | [`2.1.1.0`](http://hackage.haskell.org/package/barbies-2.1.1.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/barbies-2.1.1.0/src/LICENSE) | Classes for working with types that can change clothes. | `hedgehog` |
-| `base-orphans` | [`0.9.3`](http://hackage.haskell.org/package/base-orphans-0.9.3) | [`MIT`](http://hackage.haskell.org/package/base-orphans-0.9.3/src/LICENSE) | Backwards-compatible orphan instances for base | `distributive`, `transformers-base` |
+| `base-orphans` | [`0.9.4`](http://hackage.haskell.org/package/base-orphans-0.9.4) | [`MIT`](http://hackage.haskell.org/package/base-orphans-0.9.4/src/LICENSE) | Backwards-compatible orphan instances for base | `transformers-base` |
 | **`binary`** | [`0.8.9.2`](http://hackage.haskell.org/package/binary-0.8.9.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/binary-0.8.9.2/src/LICENSE) | Binary serialisation for Haskell values using lazy ByteStrings | `constraints`, `ghc`, `ghc-boot`, `ghci`, `text` |
-| `boring` | [`0.2.2`](http://hackage.haskell.org/package/boring-0.2.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/boring-0.2.2/src/LICENSE) | Boring and Absurd types | `constraints` |
+| `boring` | [`0.2.2.1`](http://hackage.haskell.org/package/boring-0.2.2.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/boring-0.2.2.1/src/LICENSE) | Boring and Absurd types | `constraints` |
 | **`bytestring`** | [`0.12.1.0`](http://hackage.haskell.org/package/bytestring-0.12.1.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/bytestring-0.12.1.0/src/LICENSE) | Fast, compact, strict and lazy byte strings with a list interface | `binary`, `filepath`, `ghc`, `ghc-boot`, `ghci`, `hashable`, `hedgehog`, `os-string`, `random`, `text`, `unix` |
-| `colour` | [`2.3.6`](http://hackage.haskell.org/package/colour-2.3.6) | [`MIT`](http://hackage.haskell.org/package/colour-2.3.6/src/LICENSE) | A model for human colour/color perception | `ansi-terminal`, `ansi-terminal-types` |
+| `colour` | [`2.3.7`](http://hackage.haskell.org/package/colour-2.3.7) | [`MIT`](http://hackage.haskell.org/package/colour-2.3.7/src/LICENSE) | A model for human colour/color perception | `ansi-terminal`, `ansi-terminal-types` |
 | `concurrent-output` | [`1.10.21`](http://hackage.haskell.org/package/concurrent-output-1.10.21) | [`BSD-2-Clause`](http://hackage.haskell.org/package/concurrent-output-1.10.21/src/LICENSE) | Ungarble output from several threads or commands | `hedgehog` |
-| `constraints` | [`0.14.2`](http://hackage.haskell.org/package/constraints-0.14.2) | [`BSD-2-Clause`](http://hackage.haskell.org/package/constraints-0.14.2/src/LICENSE) | Constraint manipulation | `lifted-async` |
+| `constraints` | [`0.14.4`](http://hackage.haskell.org/package/constraints-0.14.4) | [`BSD-2-Clause`](http://hackage.haskell.org/package/constraints-0.14.4/src/LICENSE) | Constraint manipulation | `lifted-async` |
 | **`containers`** | [`0.7`](http://hackage.haskell.org/package/containers-0.7) | [`BSD-3-Clause`](http://hackage.haskell.org/package/containers-0.7/src/LICENSE) | Assorted concrete container types | `binary`, `ghc`, `ghc-boot`, `ghc-heap`, `ghci`, `hashable`, `hedgehog`, `hpc`, `resourcet`, `wl-pprint-annotated` |
-| **`deepseq`** | [`1.5.0.0`](http://hackage.haskell.org/package/deepseq-1.5.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/deepseq-1.5.0.0/src/LICENSE) | Deep evaluation of data structures | `bytestring`, `constraints`, `containers`, `filepath`, `ghc`, `ghc-boot`, `ghci`, `hashable`, `hedgehog`, `hpc`, `os-string`, `pretty`, `primitive`, `process`, `random`, `safe-exceptions`, `splitmix`, `tagged`, `text`, `time`, `wl-pprint-annotated` |
+| **`deepseq`** | [`1.5.0.0`](http://hackage.haskell.org/package/deepseq-1.5.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/deepseq-1.5.0.0/src/LICENSE) | Deep evaluation of data structures | `bytestring`, `constraints`, `containers`, `filepath`, `ghc`, `ghc-boot`, `ghci`, `hashable`, `hedgehog`, `hpc`, `os-string`, `pretty`, `primitive`, `process`, `random`, `safe-exceptions`, `splitmix`, `tagged`, `text`, `time`, `unordered-containers`, `wl-pprint-annotated` |
 | **`directory`** | [`1.3.8.3`](http://hackage.haskell.org/package/directory-1.3.8.3) | [`BSD-3-Clause`](http://hackage.haskell.org/package/directory-1.3.8.3/src/LICENSE) | Platform-agnostic library for filesystem operations | `concurrent-output`, `ghc`, `ghc-boot`, `hedgehog`, `hpc`, `process` |
-| `distributive` | [`0.6.2.1`](http://hackage.haskell.org/package/distributive-0.6.2.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/distributive-0.6.2.1/src/LICENSE) | Distributive functors -- Dual to Traversable | `barbies` |
+| `distributive` | [`0.6.3`](http://hackage.haskell.org/package/distributive-0.6.3) | [`BSD-3-Clause`](http://hackage.haskell.org/package/distributive-0.6.3/src/LICENSE) | Distributive functors -- Dual to Traversable | `barbies` |
 | `erf` | [`2.0.0.0`](http://hackage.haskell.org/package/erf-2.0.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/erf-2.0.0.0) | The error function, erf, and related functions. | `hedgehog` |
 | **`exceptions`** | [`0.10.7`](http://hackage.haskell.org/package/exceptions-0.10.7) | [`BSD-3-Clause`](http://hackage.haskell.org/package/exceptions-0.10.7/src/LICENSE) | Extensible optionally-pure exceptions | `concurrent-output`, `filepath`, `ghc`, `hedgehog`, `os-string`, `resourcet`, `safe-exceptions`, `semaphore-compat` |
 | **`filepath`** | [`1.5.2.0`](http://hackage.haskell.org/package/filepath-1.5.2.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/filepath-1.5.2.0/src/LICENSE) | Library for manipulating FilePaths in a cross platform way. | `directory`, `ghc`, `ghc-boot`, `ghci`, `hashable`, `hpc`, `pretty-show`, `process`, `unix` |
-| **`ghc`** | [`9.10.1`](http://hackage.haskell.org/package/ghc-9.10.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-9.10.1/src/LICENSE) | The GHC API | `no-recursion` |
-| **`ghc-bignum`** | [`1.3`](http://hackage.haskell.org/package/ghc-bignum-1.3) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-bignum-1.3/src/LICENSE) | GHC BigNum library | `ghc-internal`, `hashable` |
+| **`ghc`** | [`9.10.1`](http://hackage.haskell.org/package/ghc-9.10.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-9.10.1/src/LICENSE) | The GHC API | `ghc-compat-plugin`, `no-recursion` |
+| **`ghc-bignum`** | [`1.3`](http://hackage.haskell.org/package/ghc-bignum-1.3) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-bignum-1.3/src/LICENSE) | GHC BigNum library | `ghc-internal` |
 | **`ghc-boot`** | [`9.10.1`](http://hackage.haskell.org/package/ghc-boot-9.10.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-boot-9.10.1/src/LICENSE) | Shared functionality between GHC and its boot libraries | `ghc`, `ghci` |
-| **`ghc-boot-th`** | [`9.10.1`](http://hackage.haskell.org/package/ghc-boot-th-9.10.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-boot-th-9.10.1/src/LICENSE) | Shared functionality between GHC and the @template-haskell@ library | `ghc-boot`, `template-haskell` |
+| **`ghc-boot-th`** | [`9.10.1`](http://hackage.haskell.org/package/ghc-boot-th-9.10.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-boot-th-9.10.1/src/LICENSE) | Shared functionality between GHC and the @template-haskell@ library | `ghc-boot`, `ghc-compat-plugin`, `template-haskell` |
+| `ghc-compat-plugin` | [`0.1.0.1`](http://hackage.haskell.org/package/ghc-compat-plugin-0.1.0.1) | [`AGPL-3.0-only`](http://hackage.haskell.org/package/ghc-compat-plugin-0.1.0.1/src/LICENSE.AGPL-3.0-only) | Eases support for multiple GHC versions | `no-recursion` |
 | **`ghc-heap`** | [`9.10.1`](http://hackage.haskell.org/package/ghc-heap-9.10.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-heap-9.10.1/src/LICENSE) | Functions for walking GHC's heap | `ghc`, `ghci` |
 | **`ghc-internal`** | [`9.1001.0`](http://hackage.haskell.org/package/ghc-internal-9.1001.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-internal-9.1001.0/src/LICENSE) | Basic libraries | `base`, `ghc-heap` |
 | **`ghc-platform`** | [`0.1.0.0`](http://hackage.haskell.org/package/ghc-platform-0.1.0.0) |  *MISSING* | *MISSING* | `ghc-boot` |
 | **`ghc-prim`** | [`0.11.0`](http://hackage.haskell.org/package/ghc-prim-0.11.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-prim-0.11.0/src/LICENSE) | GHC primitives | *(core library)* |
 | **`ghci`** | [`9.10.1`](http://hackage.haskell.org/package/ghci-9.10.1) |  *MISSING* | *MISSING* | `ghc` |
-| `hashable` | [`1.5.0.0`](http://hackage.haskell.org/package/hashable-1.5.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/hashable-1.5.0.0/src/LICENSE) | A class for types that can be converted to a hash value | `async`, `constraints` |
+| `hashable` | [`1.5.1.0`](http://hackage.haskell.org/package/hashable-1.5.1.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/hashable-1.5.1.0/src/LICENSE) | A class for types that can be converted to a hash value | `async`, `constraints`, `unordered-containers` |
 | `haskell-lexer` | [`1.2.1`](http://hackage.haskell.org/package/haskell-lexer-1.2.1) | [`MIT`](http://hackage.haskell.org/package/haskell-lexer-1.2.1/src/LICENSE) | A fully compliant Haskell 98 lexer | `pretty-show` |
 | **`hpc`** | [`0.7.0.1`](http://hackage.haskell.org/package/hpc-0.7.0.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/hpc-0.7.0.1/src/LICENSE) | Code Coverage Library for Haskell | `ghc` |
 | `lifted-async` | [`0.11.0`](http://hackage.haskell.org/package/lifted-async-0.11.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/lifted-async-0.11.0/src/LICENSE) | Run lifted IO operations asynchronously and wait for their results | `hedgehog` |
 | `lifted-base` | [`0.2.3.12`](http://hackage.haskell.org/package/lifted-base-0.2.3.12) | [`BSD-3-Clause`](http://hackage.haskell.org/package/lifted-base-0.2.3.12/src/LICENSE) | lifted IO operations from the base library | `lifted-async` |
-| `mmorph` | [`1.2.1`](http://hackage.haskell.org/package/mmorph-1.2.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/mmorph-1.2.1/src/LICENSE) | Monad morphisms | `hedgehog` |
+| `mmorph` | [`1.2.2`](http://hackage.haskell.org/package/mmorph-1.2.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/mmorph-1.2.2/src/LICENSE) | Monad morphisms | `hedgehog` |
 | `monad-control` | [`1.0.3.1`](http://hackage.haskell.org/package/monad-control-1.0.3.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/monad-control-1.0.3.1/src/LICENSE) | Lift control operations, like exception catching, through monad transformers | `hedgehog`, `lifted-async`, `lifted-base` |
 | **`mtl`** | [`2.3.1`](http://hackage.haskell.org/package/mtl-2.3.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/mtl-2.3.1/src/LICENSE) | Monad classes for transformers, using functional dependencies | `constraints`, `exceptions`, `hedgehog`, `mmorph`, `random`, `resourcet` |
 | **`os-string`** | [`2.0.2`](http://hackage.haskell.org/package/os-string-2.0.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/os-string-2.0.2/src/LICENSE) | Library for manipulating Operating system strings. | `directory`, `filepath`, `hashable`, `unix` |
@@ -62,17 +63,18 @@
 | `resourcet` | [`1.3.0`](http://hackage.haskell.org/package/resourcet-1.3.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/resourcet-1.3.0/src/LICENSE) | Deterministic allocation and freeing of scarce resources. | `hedgehog` |
 | `safe-exceptions` | [`0.1.7.4`](http://hackage.haskell.org/package/safe-exceptions-0.1.7.4) | [`MIT`](http://hackage.haskell.org/package/safe-exceptions-0.1.7.4/src/LICENSE) | Safe, consistent, and easy exception handling | `hedgehog` |
 | **`semaphore-compat`** | [`1.0.0`](http://hackage.haskell.org/package/semaphore-compat-1.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/semaphore-compat-1.0.0) | Cross-platform abstraction for system semaphores | `ghc` |
-| `splitmix` | [`0.1.3.1`](http://hackage.haskell.org/package/splitmix-0.1.3.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/splitmix-0.1.3.1/src/LICENSE) | Fast Splittable PRNG | `random` |
+| `splitmix` | [`0.1.3.2`](http://hackage.haskell.org/package/splitmix-0.1.3.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/splitmix-0.1.3.2/src/LICENSE) | Fast Splittable PRNG | `random` |
 | **`stm`** | [`2.5.3.1`](http://hackage.haskell.org/package/stm-2.5.3.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/stm-2.5.3.1/src/LICENSE) | Software Transactional Memory | `async`, `concurrent-output`, `exceptions`, `ghc`, `hedgehog`, `monad-control`, `transformers-base` |
-| `tagged` | [`0.8.9`](http://hackage.haskell.org/package/tagged-0.8.9) | [`BSD-3-Clause`](http://hackage.haskell.org/package/tagged-0.8.9/src/LICENSE) | Haskell 98 phantom types to avoid unsafely passing dummy arguments | `boring`, `distributive` |
-| **`template-haskell`** | [`2.22.0.0`](http://hackage.haskell.org/package/template-haskell-2.22.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/template-haskell-2.22.0.0/src/LICENSE) | Support library for Template Haskell | `bytestring`, `containers`, `exceptions`, `filepath`, `ghc`, `ghci`, `hedgehog`, `os-string`, `primitive`, `tagged`, `text` |
+| `tagged` | [`0.8.10`](http://hackage.haskell.org/package/tagged-0.8.10) | [`BSD-3-Clause`](http://hackage.haskell.org/package/tagged-0.8.10/src/LICENSE) | Haskell 98 phantom types to avoid unsafely passing dummy arguments | `boring`, `distributive` |
+| **`template-haskell`** | [`2.22.0.0`](http://hackage.haskell.org/package/template-haskell-2.22.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/template-haskell-2.22.0.0/src/LICENSE) | Support library for Template Haskell | `bytestring`, `containers`, `exceptions`, `filepath`, `ghc`, `ghci`, `hedgehog`, `os-string`, `primitive`, `tagged`, `text`, `unordered-containers` |
 | `terminal-size` | [`0.3.4`](http://hackage.haskell.org/package/terminal-size-0.3.4) | [`BSD-3-Clause`](http://hackage.haskell.org/package/terminal-size-0.3.4/src/LICENSE) | Get terminal window height and width | `concurrent-output` |
 | **`text`** | [`2.1.1`](http://hackage.haskell.org/package/text-2.1.1) | [`BSD-2-Clause`](http://hackage.haskell.org/package/text-2.1.1/src/LICENSE) | An efficient packed Unicode text type. | `concurrent-output`, `hashable`, `hedgehog`, `pretty-show`, `wl-pprint-annotated` |
 | **`time`** | [`1.12.2`](http://hackage.haskell.org/package/time-1.12.2) | [`BSD-2-Clause`](http://hackage.haskell.org/package/time-1.12.2/src/LICENSE) | A time library | `directory`, `ghc`, `hedgehog`, `hpc`, `unix` |
-| **`transformers`** | [`0.6.1.1`](http://hackage.haskell.org/package/transformers-0.6.1.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/transformers-0.6.1.1/src/LICENSE) | Concrete functor and monad transformers | `barbies`, `boring`, `concurrent-output`, `constraints`, `distributive`, `exceptions`, `ghc`, `ghci`, `hedgehog`, `mmorph`, `monad-control`, `mtl`, `primitive`, `random`, `resourcet`, `safe-exceptions`, `tagged`, `transformers-base`, `transformers-compat`, `unliftio-core` |
-| `transformers-base` | [`0.4.6`](http://hackage.haskell.org/package/transformers-base-0.4.6) | [`BSD-3-Clause`](http://hackage.haskell.org/package/transformers-base-0.4.6/src/LICENSE) | Lift computations from the bottom of a transformer stack | `hedgehog`, `lifted-async`, `lifted-base`, `monad-control` |
+| **`transformers`** | [`0.6.1.1`](http://hackage.haskell.org/package/transformers-0.6.1.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/transformers-0.6.1.1/src/LICENSE) | Concrete functor and monad transformers | `barbies`, `concurrent-output`, `constraints`, `distributive`, `exceptions`, `ghc`, `ghci`, `hedgehog`, `mmorph`, `monad-control`, `mtl`, `primitive`, `random`, `resourcet`, `safe-exceptions`, `transformers-base`, `transformers-compat`, `unliftio-core` |
+| `transformers-base` | [`0.4.6.1`](http://hackage.haskell.org/package/transformers-base-0.4.6.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/transformers-base-0.4.6.1/src/LICENSE) | Lift computations from the bottom of a transformer stack | `hedgehog`, `lifted-async`, `lifted-base`, `monad-control` |
 | `transformers-compat` | [`0.7.2`](http://hackage.haskell.org/package/transformers-compat-0.7.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/transformers-compat-0.7.2/src/LICENSE) | A small compatibility shim for the transformers library | `mmorph`, `monad-control`, `transformers-base` |
 | **`unix`** | [`2.8.5.1`](http://hackage.haskell.org/package/unix-2.8.5.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/unix-2.8.5.1/src/LICENSE) | POSIX functionality | `concurrent-output`, `directory`, `ghc`, `ghc-boot`, `ghci`, `process`, `semaphore-compat` |
 | `unliftio-core` | [`0.2.1.0`](http://hackage.haskell.org/package/unliftio-core-0.2.1.0) | [`MIT`](http://hackage.haskell.org/package/unliftio-core-0.2.1.0/src/LICENSE) | The MonadUnliftIO typeclass for unlifting monads to IO | `resourcet` |
-| `wl-pprint-annotated` | [`0.1.0.1`](http://hackage.haskell.org/package/wl-pprint-annotated-0.1.0.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/wl-pprint-annotated-0.1.0.1/src/LICENSE) | Pretty printer with annotation support | `hedgehog` |
+| `unordered-containers` | [`0.2.21`](http://hackage.haskell.org/package/unordered-containers-0.2.21) | [`BSD-3-Clause`](http://hackage.haskell.org/package/unordered-containers-0.2.21/src/LICENSE) | Efficient hashing-based container types | `async` |
+| `wl-pprint-annotated` | [`0.1.0.2`](http://hackage.haskell.org/package/wl-pprint-annotated-0.1.0.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/wl-pprint-annotated-0.1.0.2/src/LICENSE) | Pretty printer with annotation support | `hedgehog` |
 
diff --git a/duoids-hedgehog.cabal b/duoids-hedgehog.cabal
--- a/duoids-hedgehog.cabal
+++ b/duoids-hedgehog.cabal
@@ -1,7 +1,7 @@
 cabal-version: 3.0
 
 name: duoids-hedgehog
-version: 0.0.1.0
+version: 0.0.2.0
 synopsis: Unifying parallel and sequential operations
 description: Duoids relate a pair of monoids, where one can be seen as
             “parallel” and the other “sequential”.
@@ -37,17 +37,6 @@
   location: https://github.com/sellout/duoids.git
   subdir: hedgehog
 
-flag noisy-deprecations
-  description:
-    Prior to GHC 9.10, the @DEPRECATED@ pragma can’t distinguish between terms
-    and types. Consenquently, you can get spurious warnings when there’s a name
-    collision and the name in the other namespace is deprecated. Or you can
-    choose to not get those warnings, at the risk of not being warned when
-    there’s a name collision and the namespace you’re referencing is the one
-    that’s deprecated.
-  default: True
-  manual: False
-
 custom-setup
   setup-depends:
     -- TODO: Due to haskell/cabal#3751, `Cabal` has to be specified even though
@@ -58,8 +47,27 @@
     Cabal >= 3.0 && < 99,
     base ^>= {4.18.0, 4.19.0, 4.20.0, 4.21.0},
     cabal-doctest ^>= {1.0.0},
-    no-recursion ^>= {0.2.0, 0.3.0},
 
+flag noisy-deprecations
+  description:
+    Prior to GHC 9.10, the @DEPRECATED@ pragma can’t distinguish between terms
+    and types. Consenquently, you can get spurious warnings when there’s a name
+    collision and the name in the other namespace is deprecated. Or you can
+    choose to not get those warnings, at the risk of not being warned when
+    there’s a name collision and the namespace you’re referencing is the one
+    that’s deprecated.
+  default: True
+  -- Because disabling this flag won’t help the solver.
+  manual: True
+
+flag lint
+  description:
+    Compile with "NoRecursion" enabled. This is intended for developers of this
+    package.
+  default: False
+  -- Because disabling this flag won’t help the solver.
+  manual: True
+
 -- This mimics the GHC2024 extension
 -- (https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/control.html?highlight=doandifthenelse#extension-GHC2024),
 -- but supporting compilers back to GHC 8.0. If the oldest supported compiler
@@ -83,7 +91,6 @@
   import: GHC2024
   build-depends:
     base ^>= {4.18.0, 4.19.0, 4.20.0, 4.21.0},
-    no-recursion ^>= {0.2.0, 0.3.0},
   ghc-options:
     -Weverything
     -- This one just reports unfixable things, AFAICT.
@@ -93,7 +100,6 @@
     -- Warns even when `Unsafe` is explicit, not inferred. See
     -- https://gitlab.haskell.org/ghc/ghc/-/issues/16689
     -Wno-unsafe
-    -fplugin=NoRecursion
   if impl(ghc >= 9.8.1)
     ghc-options:
       -- Inference good.
@@ -120,13 +126,19 @@
     NoStarIsType
     NoTypeApplications
   if flag(noisy-deprecations)
-    cpp-options: -DSELLOUT_NOISY_DEPRECATIONS
+    cpp-options:
+      -DSELLOUT_NOISY_DEPRECATIONS
+  if flag(lint)
+    build-depends:
+      no-recursion ^>= {0.2.0, 0.3.0, 0.4.0},
+    ghc-options:
+      -fplugin=NoRecursion
 
 library
   import: defaults
   hs-source-dirs: src
   build-depends:
-    duoids ^>= {0.0.1},
+    duoids ^>= {0.0.1, 0.1.0},
     hedgehog ^>= {1.2, 1.4, 1.5, 1.7},
   exposed-modules:
     Test.Duoid
@@ -146,7 +158,7 @@
   hs-source-dirs: tests
   main-is: doctests.hs
   build-depends:
-    doctest ^>= {0.21.1, 0.22.6, 0.24.0},
+    doctest ^>= {0.21.1, 0.22.6, 0.24.0, 0.25.0},
     duoids-hedgehog,
   -- TODO: The sections below here are necessary because we don’t have control
   --       over the generated `Build_doctests.hs` file. So we have to silence
