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
Hashes for tx_functional-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d2ac68362d71af2fd19f54e23827eca7bda612a22a6b8f03faa521d41e2561b1 |
|
MD5 | c38f8f66393e7c79af95948a7900ec94 |
|
BLAKE2b-256 | ca686633316e395f2293c0a2e3ddb1eb77e9acdaee7a035d18233762d3ab44b0 |