ghostwheel
truss
ghostwheel | truss | |
---|---|---|
2 | 4 | |
597 | 296 | |
- | 0.0% | |
4.0 | 5.9 | |
3 months ago | 21 days ago | |
Clojure | Clojure | |
Eclipse Public License 2.0 | Eclipse Public License 1.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ghostwheel
-
fulcrologic/guardrails: spec as a loose type checker
big fan of fulcro logic, but isn’t this almost identical to https://github.com/gnl/ghostwheel ?
-
Python dataclass equivalent
if all you care about is information / documentation, and maybe validation, then spec or malli are fine. using spec during runtime to simulate a type system is a poor choice in most cases, because you are doing runtime type checking (something akin to dependent types or even esoteric contracts that are hard/impossible to express statically). There are some libs that help bolt a typed facade (using spec) onto the familiar defn / fn, https://github.com/gnl/ghostwheel https://github.com/Provisdom/defn-spec .
truss
-
Java 21: What’s New?
When type checking is needed, I find the Truss library* does the trick quite well.
As for the syntax, there is very little, which can make it a harder lift but once you have the hang of it you won't deal with the issues identified in the parent comment.
* https://github.com/taoensso/truss
-
Tired by the dynamicism
I use truss extensively throughout my code to prevent those types of errors.
-
Python dataclass equivalent
I haven't tried it myself. I generally just use truss for runtime constraint checking. I use a modified version that integrates scope-capture. And malli validation for more complex cases, but I try to limit that. For me it is better to validate individual attributes as needed, vs validating an entire "type"/collection of attributes. So each function only cares about the attributes that it needs, and validates only as needed.
-
Love Clojure, challenged by discoverability
Use assertions for all data requirements inside functions - I use a modified version of https://github.com/ptaoussanis/truss to ensure that I never get NullReference exceptions, and this also helps make functions more self-documenting. Also use this to assert return data.
What are some alternatives?
clj-otel - An idiomatic Clojure API for adding telemetry to your libraries and applications using OpenTelemetry.
portal - A clojure tool to navigate through your data.
spec-tools - Clojure(Script) tools for clojure.spec
scope-capture - Project your Clojure(Script) REPL into the same context as your code when it ran
kaocha - Full featured next gen Clojure test runner
test-refresh - Refreshes and reruns clojure.tests in your project.
malli - High-performance data-driven data specification library for Clojure/Script.
hashp - A better "prn" for debugging
python-nrepl
grasp - Grep Clojure code using clojure.spec regexes
plumbing - Prismatic's Clojure(Script) utility belt