Functional, immutable, concurrent Python — all batteries included
Project description
hulista
Functional, immutable, concurrent Python — all batteries included.
hulista is the single published distribution for the full hulista toolkit. One install gives you immutable data structures, sealed typing, runtime dispatch, actor-style concurrency, collect-all task groups, functional combinators, and record-update ergonomics.
Documentation: https://rahulrajaram.github.io/hulista/
Why install the umbrella package?
Install hulista when you want a coherent batteries-included stack instead of picking packages one by one. It is especially useful for:
- event-driven or agent-style systems that combine immutable state with async orchestration
- teams that want one dependency and one docs entry point
- experimentation across the full package family before narrowing to individual imports
The hulista wheel bundles the toolkit's runtime modules directly:
| Package | Import | Description |
|---|---|---|
| asyncio-actors | asyncio_actors |
OTP-inspired actor primitives for asyncio |
| fp-combinators | fp_combinators |
Lightweight functional programming combinators |
| live-dispatch | live_dispatch |
Runtime-extensible multiple dispatch |
| persistent-collections | persistent_collections |
Immutable collections with structural sharing |
| sealed-typing | sealed_typing |
Sealed classes for exhaustive matching |
| taskgroup-collect | taskgroup_collect |
TaskGroup that collects all errors |
| with-update | with_update |
Record update syntax for frozen dataclasses |
Install
Install the full toolkit:
pip install hulista
The bundled modules remain importable directly if you prefer focused imports:
from persistent_collections import PersistentMap
from fp_combinators import pipe
Quick start
import hulista
# Persistent immutable map
m = hulista.PersistentMap().set("x", 1).set("y", 2)
# FP pipe
result = hulista.pipe(m, lambda pm: sum(pm.values()))
# Result type
ok = hulista.Ok(42)
err = hulista.Err("oops")
# Sealed hierarchy
@hulista.sealed
class Event: pass
class Click(Event): pass
class KeyPress(Event): pass
subs = hulista.sealed_subclasses(Event) # {Click, KeyPress}
What you get
PersistentMap/PersistentVectorfor immutable application state with structural sharingpipe,async_pipe,Ok, andErrfor dataflow and typed error handlingActorSystemfor supervised async workers and message passingDispatcherfor runtime-extensible type or predicate dispatchsealedfor exhaustiveness-friendly closed hierarchiesCollectorTaskGroupfor collect-all structured concurrencyupdatableandwith_updatefor record-update syntax on frozen models
Source layout
Each package lives in the monorepo with its own README and tests, but the public PyPI release is hulista:
asyncio-actors/fp-combinators/live-dispatch/persistent-collections/sealed-typing/taskgroup-collect/with-update/
Requires Python 3.11+
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hulista-0.1.1.tar.gz.
File metadata
- Download URL: hulista-0.1.1.tar.gz
- Upload date:
- Size: 56.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7dfcb8094d43a94a12cbc01274a53f64cd5325f4d331711a6c1379192b0045bb
|
|
| MD5 |
a7f661a72e3b3259d23e25b4100abd24
|
|
| BLAKE2b-256 |
5630653a432149df08d3254e10f2f734dfce82a1d60d137af1209d01a596a1b6
|
Provenance
The following attestation bundles were made for hulista-0.1.1.tar.gz:
Publisher:
publish.yml on rahulrajaram/hulista
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hulista-0.1.1.tar.gz -
Subject digest:
7dfcb8094d43a94a12cbc01274a53f64cd5325f4d331711a6c1379192b0045bb - Sigstore transparency entry: 1340696305
- Sigstore integration time:
-
Permalink:
rahulrajaram/hulista@a16cd40e17b1103b529dee8a034c0f5fbf19e857 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/rahulrajaram
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a16cd40e17b1103b529dee8a034c0f5fbf19e857 -
Trigger Event:
push
-
Statement type:
File details
Details for the file hulista-0.1.1-py3-none-any.whl.
File metadata
- Download URL: hulista-0.1.1-py3-none-any.whl
- Upload date:
- Size: 73.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b51689910b76d0604a677aa7e3a7abda655d42d2de8cc057eec7a21a0890df66
|
|
| MD5 |
5f5c2bf87c28e7aa00eca9aaf96dd4bb
|
|
| BLAKE2b-256 |
fca77d1c31730cb78ed1b1bb9645e4d9f75e33ebf8634dd7126e5a60caa0a32b
|
Provenance
The following attestation bundles were made for hulista-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on rahulrajaram/hulista
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hulista-0.1.1-py3-none-any.whl -
Subject digest:
b51689910b76d0604a677aa7e3a7abda655d42d2de8cc057eec7a21a0890df66 - Sigstore transparency entry: 1340696307
- Sigstore integration time:
-
Permalink:
rahulrajaram/hulista@a16cd40e17b1103b529dee8a034c0f5fbf19e857 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/rahulrajaram
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a16cd40e17b1103b529dee8a034c0f5fbf19e857 -
Trigger Event:
push
-
Statement type: