Cross-platform embedded representation for algebraic data types, values, and common operations.
Project description
Cross-platform embedded representation for algebraic data types, values, and common operations.
This family of libraries supports a cross-platform embedded representation for algebraic data type (ADT) values, and platform-specific embedded programming abstractions for common operations (such as pattern matching) on algebraic data type values.
Package Installation and Usage
The package is available on PyPI:
python -m pip install uxadt
The library can be imported in the usual way:
import uxadt
You may want to define _
as a global for the sake of concision:
_ = None
It does not matter what is assigned to _
, as long as it is not a uxadt value.
Examples
The following is a simple algebraic data type definition:
uxadt._({\ 'Node': [_, _],\ 'Leaf': []\ })
To better document the implicit constraints associated with the definition, it is possible to provide an explicit name for the algebraic data type and the types of the constructor arguments (no static or dynamic checking of the constraints implied by this information is currently supported by the library itself):
uxadt._('Tree', {\ 'Node': ['Tree', 'Tree'],\ 'Leaf': []\ })
An individual value can be built up as an expression in the following way:
Node(Node(Leaf(), Leaf()), Leaf())
Below is a simple recursive function that counts the number of nodes in a tree value (i.e., a value that corresponds to the algebraic data type definition in the above example):
def size(t): return t\ ._(Leaf(), lambda: 1)\ ._(Node(_, _), lambda x,y: 1 + size(x) + size(y))\ .end
The library provides an alternate interface for using pattern matching that follows a more imperative paradigm (this can be useful because the body of a lambda
expression cannot be a statement):
def size(t): if t < Leaf(): return 1 elif t < Node(_, _): (x, y) = t return 1 + size(x) + size(y)
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
File details
Details for the file uxadt-0.1.1.0.tar.gz
.
File metadata
- Download URL: uxadt-0.1.1.0.tar.gz
- Upload date:
- Size: 4.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e146297115d2ac1e628ae2872b542226b77db29cfb01888c50bbe2911dfca29a |
|
MD5 | 513139987fea8f28697b6c979079e069 |
|
BLAKE2b-256 | 9b2587d95b9f4e1e7d975e08ab837b708261f91c792e4d2ffadc37e762aac907 |