type-level

Type-level programming in Rust


Keywords
type-level
License
MIT

Documentation

shoggoth.rs

Generic and type-level programming for Rust

build status

It was a terrible, indescribable thing vaster than any subway train—a shapeless congeries of protoplasmic bubbles, faintly self-luminous, and with myriads of temporary eyes forming and un-forming as pustules of greenish light all over the tunnel-filling front that bore down upon us, crushing the frantic penguins and slithering over the glistening floor that it and its kind had swept so evilly free of all litter.

—H. P. Lovecraft, At The Mountains of Madness

Synopsis

This library implements generic and type-level programming functionality. It is heavily inspired by Miles Sabin's Shapeless for Scala.

Features

Current

  • heterogeneous lists
  • type-level operations (polyadic, curried, composable, higher-order)
  • type-level bits and booleans
  • type-level binary natural numbers and integers
  • type-level lists (mappable with type-level operations)
  • type-level list zippers
  • type-level lenses

Future

  • more functionality for working with hlists/tuples
  • coproducts
  • hlist/vinyl-style records
  • type-level binary rationals
  • type macros

Requirements

  1. Rust
  2. Cargo

You can install both with the following:

$ curl -s https://static.rust-lang.org/rustup.sh | sudo sh

See Installing Rust for further details.

Usage

$ cargo build       ## build library and binary
$ cargo test        ## run tests in ./tests
$ cargo bench       ## run benchmarks in ./benches

Discussion

There is an IRC channel on freenode (chat.freenode.net) at #epsilonz.