marick/structural-typing

Define types by giving descriptions (perhaps incomplete) of how they're built. "...by how they're built" means applying arbitrary predicates (especially ones about existence) to parts of structures. The top-level namespaces contain what you need to use the library, including simpler customizations. The .assist namespaces are useful for more in-depth customizations.

Leiningen/Boot

[marick/structural-typing "2.0.0"]

Clojure CLI/deps.edn

marick/structural-typing {:mvn/version "2.0.0"}

Gradle

implementation("marick:structural-typing:2.0.0")

Maven

<dependency>
  <groupId>marick</groupId>
  <artifactId>structural-typing</artifactId>
  <version>2.0.0</version>
</dependency>