Skip to main content

Structured effects for modern Python

Project description

pyfect

PyPI version Python 3.13+ CI codecov Documentation Status License: MIT

Structured effects for modern Python

Python is being used to build systems far larger and more concurrent than it was originally designed for. Async is now unavoidable, yet error handling, resource management, and concurrency remain ad‑hoc and fragile. Exceptions leak everywhere. Background tasks escape. The sync/async boundary infects entire codebases.

pyfect exists to make this situation survivable.

It provides a small, opinionated core for describing effects explicitly, handling errors as values, and enforcing structured concurrency — without turning Python into something unrecognizable.


What pyfect is

  • A Python‑native effect system inspired by functional programming, not a port of another language
  • A single execution model that can compose synchronous and asynchronous work
  • Explicit errors that compose instead of exploding control flow
  • Structured concurrency by default — no silent background work
  • A runtime‑first design where safety is enforced at execution boundaries

pyfect favors clarity, discipline, and correctness over convenience magic.


What pyfect is not

  • Not a framework
  • Not a replacement for asyncio, Trio, or AnyIO
  • Not “pure FP” or academic
  • Not decorator‑driven async magic
  • Not a grab‑bag of monadic utilities

pyfect does not attempt to encode the entire program in types, eliminate exceptions everywhere, or abstract away Python’s runtime model.


Design philosophy

Safety over convenience

If an operation can fail, it should say so. If work runs concurrently, it should be scoped. If resources are acquired, their lifetime should be explicit.

pyfect intentionally avoids APIs that:

  • spawn unscoped background tasks
  • swallow errors
  • rely on implicit global state
  • hide sync/async boundaries

Effects describe, runtimes decide

Effects are descriptions of work. Execution is centralized and controlled. Side effects only happen at the boundary, where they can be supervised, cancelled, logged, or traced.

Small core, honest utilities

The core of pyfect is intentionally small. Utilities are built on top — but only when they preserve explicit failure, structured concurrency, and resource safety.


Status

pyfect is in early design and exploration. The ideas and philosophy are being shaped before the implementation is finalized.

Expect breaking changes. Expect opinions. Expect discipline.


License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyfect-0.2.0.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyfect-0.2.0-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file pyfect-0.2.0.tar.gz.

File metadata

  • Download URL: pyfect-0.2.0.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyfect-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e905ce3e3ff0a2c2644d1899dd7f47aa63a4aa7250590a65488714761102a0e2
MD5 f601661fb1642b6d5eb3b83e6af7bd4a
BLAKE2b-256 6e281da955f432d86471bcd462c878fa1b7a0a5572ec7f74e88b029cc10ba091

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfect-0.2.0.tar.gz:

Publisher: publish.yaml on pyfect/pyfect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfect-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pyfect-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyfect-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e30ce69987c6666768f3fb035bd4d73c34f5571bb8d3036454530e851e3974f8
MD5 cccfb7e5682e84b54aa2086a5e02cdb9
BLAKE2b-256 f9f246a4290ba3d9ac97a7c7bd2c780758b51cee638a6ce61541bf6bc073964f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfect-0.2.0-py3-none-any.whl:

Publisher: publish.yaml on pyfect/pyfect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page