A pickleable generic functional programming library
Project description
tx-functional
Generic functional programming library for Python
The goal of this is
- Close to Haskell.
- Work with mypy
- Pickleable
We choose functions in uncurried form because mypy doesn't support type variable that only appear in return type of a function signature.
classes
Functor
The Functor class is defined in tx.functional.functor.
It takes in a _map argument. A functor F is a higer-kinded type * -> *.
A functor is defined by a map function
map: (S -> T, F[S]) -> F[T]
Applicative
The Applicative class is defined in tx.functional.applicative.
It takes in _map, _pure, and _ap. An applicative F is a functor.
An applicative is defined by additional pure and ap functions
pure: S -> F[S]
ap: (F[S -> T], F[S]) -> F[T]
Monad
The Monad class is defined in tx.functional.monad.
It takes in _pure and _bind. A monad F is an applicative and a functor.
A monad is defined by an additional bind function
bind: (F[S], S -> F[T]) -> F[T]
Traversable
The Traversable class is defined in tx.functional.traversable.
It takes in _sequenceA. A traversable F is a functor.
A traversable is defined by an additional sequenceA function
sequenceA: F[G[S]] -> G[F[S]]
where G is an applicative
instances
Maybe
Maybe is defined in tx.functional.maybe. It has two constructors, Just and _Nothing. An object Nothing is defined.
We should always use == Nothing to test equality and not is Nothing.
The Functor instance maybe_functor, Applicative instance maybe_applicative, and Monad instance maybe_monad are defined.
Just(1)
Nothing
maybe_applicative.pure(1)
a.bind(lambda x: Nothing)
a.map(lambda x: 1)
Either
Either is defined in tx.functional.either. It has two constructors, Left and Right.
The Functor instance either_functor, Applicative instance either_applicative, and Monad instances either_monad are defined.
Left(1)
Right(1)
either_applicative.pure(1)
a.bind(lambda x: Left(1))
a.map(lambda x: 1)
List
The python builtin types are used. The Functor instance list_functor and Traversable instance list_traversable are defined in tx.functional.list.
The list_traversable instance is a function that takes in an applicative.
list_traversable(maybe_applicative).sequenceA([Just(1)])
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 tx-functional-0.1.2.tar.gz.
File metadata
- Download URL: tx-functional-0.1.2.tar.gz
- Upload date:
- Size: 5.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3.post20200330 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c33be62c369ec0f38c5892287ae91b7caf2171308edfe591cf0dc27dd05788ff
|
|
| MD5 |
a891b92bc3c9d129be2361f444e90162
|
|
| BLAKE2b-256 |
cdb112bf76e5076ad137f856c28122678c9ecfadbb10205c0230141fca0e2eb2
|
File details
Details for the file tx_functional-0.1.2-py3-none-any.whl.
File metadata
- Download URL: tx_functional-0.1.2-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3.post20200330 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2ac68362d71af2fd19f54e23827eca7bda612a22a6b8f03faa521d41e2561b1
|
|
| MD5 |
c38f8f66393e7c79af95948a7900ec94
|
|
| BLAKE2b-256 |
ca686633316e395f2293c0a2e3ddb1eb77e9acdaee7a035d18233762d3ab44b0
|