Skip to content

llogiq/ternary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kleene logic within Rust's type system

Build Status Current Version Coverage Status License: MIT/Apache

Values are True, False and Unknown. Operations are Not, BitAnd and BitOr from std::ops. There is also the Ternary enum which represents the values at runtime and the ToTernary trait that adds the to_ternary() methods to our value types.

For more information read the API documentation

Examples:

Same and Not

 use ternary::{True, False, Unknown, Same};
 use std::ops::Not;
type NotTrue = <<True as Not>::Output as Same<False>>::Output;
type NotFalse = <<False as Not>::Output as Same<True>>::Output;
type NotUnknown = <<Unknown as Not>::Output as Same<Unknown>>::Output;

Transforming Values to Runtime, BitAnd and BitOr

assert_eq!(Ternary::T, <True as BitOr<<Unknown as 
    BitAnd<False>>::Output>>::Output::to_ternary());

To use it, add ternary = "0.1.0" to your dependencies.

About

Kleene logic in Rust's type system

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages