Expand description
§algebra-core-derive — procedural macros for algebraic traits
Part of the postbox workspace
This crate provides derive macros for the algebra-core library,
enabling boilerplate-free implementations of algebraic traits for
product types (structs with named or unnamed fields).
§Supported derives
§Semigroup hierarchy
#[derive(Semigroup)]— implementscombineby combining each field#[derive(Monoid)]— implementsempty()by callingempty()on each field#[derive(CommutativeMonoid)]— marker trait requiringMonoid#[derive(Group)]— implementsinverseby inverting each field#[derive(AbelianGroup)]— marker trait requiringGroup + CommutativeMonoid
§Join-semilattice hierarchy
#[derive(JoinSemilattice)]— implementsjoinby joining each field#[derive(BoundedJoinSemilattice)]— implementsbottom()by callingbottom()on each field
§Meet-semilattice hierarchy
#[derive(MeetSemilattice)]— implementsmeetby meeting each field#[derive(BoundedMeetSemilattice)]— implementstop()by callingtop()on each field
§Usage
These macros are re-exported through algebra-core when the derive feature is enabled:
ⓘ
use algebra_core::{Semigroup, Monoid, JoinSemilattice, BoundedJoinSemilattice};
#[derive(Clone, PartialEq, Eq, Debug)]
#[derive(Semigroup, Monoid, JoinSemilattice, BoundedJoinSemilattice)]
struct MyLattice {
counter: algebra_core::Max<i32>,
tags: std::collections::HashSet<String>,
}Each derive macro generates efficient componentwise implementations following standard product algebra semantics.
Derive Macros§
- Abelian
Group - Derive macro for
AbelianGroup. - Bounded
Join Semilattice - Derive macro for
BoundedJoinSemilattice. - Bounded
Meet Semilattice - Derive macro for
BoundedMeetSemilattice. - Commutative
Monoid - Derive macro for
CommutativeMonoid. - Group
- Derive macro for
Group. - Join
Semilattice - Derive macro for
JoinSemilattice. - Meet
Semilattice - Derive macro for
MeetSemilattice. - Monoid
- Derive macro for
Monoid. - Semigroup
- Derive macro for
Semigroup.