# witchcrafters/witchcraft

Monads and other dark magic for Elixir

Repository: https://github.com/witchcrafters/witchcraft
Canonical: https://ross.abutalabs.com/products/witchcraft
Homepage: https://witchcrafters.github.io
Language: Elixir
License: MIT
License Family: permissive
Topics: elixir, type-class, functor, monad, category, applicative, traversable, operators, algebraic-data-types, algebra
Last push: 2023-08-28T14:32:22+00:00

## Health v2 (maintenance only)
Score: 23/100 (v2, computed 2026-09-03T02:20:16.233290+00:00)
- activity 0, release rhythm 8, longevity 100
- inputs: {"age_days": 3984, "days_push": 1101, "days_rel": null, "gap_med": null, "n_releases_24m": 0}
- flags: none
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 1236, forks 60 (observed 2026-08-28T04:04:05.202604+00:00)

## 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.

## 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

## 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

## 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

## Facets
- artifact type: library
- maturity: maintenance
- function: programming-language
- domain: programming-languages, developer-tools
- platform: elixir
- tags: monads, functors, category-theory, algebraic-data-types, functional-programming, type-classes, applicative, traversable, algorithms

## Member repositories
- witchcrafters/witchcraft (main) score 23

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:04:05.202604+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-30T08:22:01.916558+00:00, confidence not recorded.
  - readme: https://github.com/witchcrafters/witchcraft (fetched 2026-08-28T04:04:05.202604+00:00, sha 78ceb8ad7b65)
  - homepage: https://witchcrafters.github.io (fetched 2026-08-29T12:21:18.409207+00:00, sha 657e3cc86671)
- Data as of 2026-08-30T08:39:29.467469+00:00.
