Skip to main content

uxadt

Cross-platform embedded representation for algebraic data types, values, and common operations.

PyPI version and link.

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)

Release files for UxADT 0.1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for UxADT 0.1.1.0
File Size Uploaded
uxadt-0.1.1.0.tar.gz 4.4 kB Details

Release files / uxadt-0.1.1.0.tar.gz

Download URL uxadt-0.1.1.0.tar.gz
Size 4.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e146297115d2ac1e628ae2872b542226b77db29cfb01888c50bbe2911dfca29a
BLAKE2b-256 checksum
How to use checksums
9b2587d95b9f4e1e7d975e08ab837b708261f91c792e4d2ffadc37e762aac907
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page