{"adoption": {"forks": 60, "observed_at": "2026-08-28T04:04:05.202604+00:00", "stars": 1236}, "canonical_url": "https://ross.abutalabs.com/products/witchcraft", "card": {"archived": false, "artifact_type": "library", "description": "Monads and other dark magic for Elixir", "domain": ["programming-languages", "developer-tools"], "enriched": true, "function": ["programming-language"], "health_score": 20, "homepage": "https://witchcrafters.github.io", "language": "Elixir", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["witchcrafters/witchcraft"], "name": "witchcrafters/witchcraft", "platform": ["elixir"], "pushed_at": "2023-08-28T14:32:22+00:00", "repo": "witchcrafters/witchcraft", "stars": 1236, "tags": ["monads", "functors", "category-theory", "algebraic-data-types", "functional-programming", "type-classes", "applicative", "traversable", "algorithms"], "topics": ["elixir", "type-class", "functor", "monad", "category", "applicative", "traversable", "operators", "algebraic-data-types", "algebra"], "urls": [], "use_cases": ["use monads in elixir", "functional programming abstractions for elixir", "implement functors and applicatives in elixir", "chain computations with monadic error handling", "bring haskell-style type classes to elixir", "compose functions with arrows and categories", "work with algebraic data types in elixir"], "what_it_is": "Witchcraft is an Elixir library providing common algebraic and categorical abstractions such as monoids, functors, applicatives, monads, arrows, and categories. It lets Elixir developers write idiomatic functional code using type classes without leaving the language.", "when_to_avoid": ["your team is unfamiliar with category theory and you need simple, pragmatic code", "you need maximum performance, since abstraction layers add overhead", "you need a very actively developed library, as releases are infrequent", "your project only needs basic Elixir standard library functionality"], "when_to_choose": ["you want Haskell-like abstractions while staying in idiomatic Elixir", "you need monads, functors, or monoids for composable pipelines", "you want to introduce functional programming concepts to an Elixir team", "you prefer pipe-friendly operators that follow Elixir conventions"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/witchcraft", "repo": "witchcrafters/witchcraft", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.202604+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.916558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "78ceb8ad7b65de76e6616d4a5ecca030b3bf5887810f8bc32c667be96b6c001c", "fetched_at": "2026-08-28T04:04:05.202604+00:00", "kind": "readme", "missing": false, "url": "https://github.com/witchcrafters/witchcraft"}, {"content_hash": "657e3cc86671b98718e7de7a493370cc2f2a779d5403bd013b29cbc93f44198f", "fetched_at": "2026-08-29T12:21:18.409207+00:00", "kind": "homepage", "missing": false, "url": "https://witchcrafters.github.io"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3984, "days_push": 1101, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}