NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2237 most downloaded on crates.io
type-witness-based abstractions, mostly for emulating polymorphism in const fns
Last release 5 months ago
14 Apr 2026
Release timing varies
gaps range from 9 days to 11 months
Most releases are documented
notes for 19 of 23 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
24 releases · first in 2023
One column per quarter.
Fixed inclusion of serde impls on docs.rs documentation
Fixed inclusion of serde impls on docs.rs documentation
Fixed support for de/serializing into non-self-describing formats
Fixed support for de/serializing into non-self-describing formats
This release adds some std and serde impls for const marker types.
This release adds some std and serde impls for const marker types.
Added opt-in "serde" feature
Added these impls for const marker types:
DefaultHashOrdPartialOrdserde::Deserialize (gated on "serde" feature)serde::Serialize (gated on "serde" feature)Nothing published for this version
Fix: Added docs to simple_type_witness-generated equals method to avoid triggering missing_docs lint in downstream crates.
Fix: Added docs to simple_type_witness-generated equals method to avoid triggering missing_docs lint in downstream crates.
This release adds traits for abstracting over const markers, traits for const marker comparison, and expect_* methods to BoolWitG and TypeCmp .
This release adds traits for abstracting over const markers, traits for const marker comparison, and expect_* methods to BoolWitG and TypeCmp.
Added expect_true and expect_false methods to typewit::const_marker::BoolWitG
Added expect_eq and expect_ne methods to typewit::TypeCmp
Added these items:
typewit::const_marker::ConstMarker traittypewit::const_marker::ConstMarkerOf trait (alias for ConstMarker)Added these items (gated on "rust_1_83" feature):
typewit::const_marker::CmEquals type aliastypewit::const_marker::ConstMarkerEq traittypewit::const_marker::ConstMarkerEqOf trait (alias for ConstMarkerEq)typewit::const_marker::ConstMarkerHasWitness trait (with a blanket impl)typewit::const_marker::HasConstMarker traittypewit::const_marker::StdTypeEquality typeAdded ConstMarker, ConstMarkerEq impls for std-related marker types from typewit::const_marker.
Added HasConstMarker impls for std types.
Changed Debug impls of const marker types from only formatting their type name to delegating to the const parameter.
Added PartialEq and Eq impls for const marker types.
This release adds the map_to_arg and project_to_arg methods to TypeNe to use the fact that f(a) != f(b) implies a != b , and an Equals derive in simpl
This release adds the map_to_arg and project_to_arg methods to TypeNe to use the fact that f(a) != f(b) implies a != b, and an Equals derive in simple_type_witness macro.
Added TypeNe::{map_to_arg, project_to_arg} methods.
Added Equals derive to simple_type_witness macro, which defines equals inherent method on the type witness.
Added "generic_const_exprs" crate feature, currently only used for doc examples.
Fixed outdated README feature section.
Nothing published for this version
Added "generic_const_exprs" crate feature, currently only used for doc examples.
Added "generic_const_exprs" crate feature, currently only used for doc examples.
Fixed outdated README feature section.
This release allows using functions that use &mut in const contexts on the latest Rust release (Rust 1.83.0).
This release allows using functions that use &mut in const contexts on the latest Rust release (Rust 1.83.0).
Added "rust_1_83" feature, which turns typewit functions that use &mut into const fns.
Added these methods to BoolWitG:
is_trueis_falseto_trueto_falseunwrap_trueunwrap_falseRelaxed Copy + Clone + Debug impls of BooleanWitG to work for any <B> BooleanWitG<B>, instead of requiring <const B: bool> BoolWitG<Bool<B>>.
Fixed TypeWitnessTypeArg impl for BoolWitG, it was overconstrained in a way that made HasTypeWitness<BoolWitG<T>> not work as a bound.
Added typewit::const_marker::BoolWitG enum
Replaced typewit::const_marker::BoolWit enum with type alias to `BoolWitG``
Added Copy + Clone + Debug impls to BoolWit
Fixed "adt_const_marker" crate feature
Added "rust_1_83" feature, which turns typewit functions that use &mut into const fns.
Added these methods to BoolWitG:
is_trueis_falseto_trueto_falseunwrap_trueunwrap_falseRelaxed Copy + Clone + Debug impls of BooleanWitG to work for any <B> BooleanWitG<B>, instead of requiring <const B: bool> BoolWitG<Bool<B>>.
Fixed TypeWitnessTypeArg impl for BoolWitG, it was overconstrained in a way that made HasTypeWitness > not work as a bound.
Fixed TypeWitnessTypeArg impl for BoolWitG, it was overconstrained in a way that made HasTypeWitness<BoolWitG<T>> not work as a bound.
Added typewit::const_marker::BoolWitG enum
Added typewit::const_marker::BoolWitG enum
Replaced typewit::const_marker::BoolWit enum with type alias to `BoolWitG``
Added Copy + Clone + Debug impls to BoolWit
Fixed "adt_const_marker" crate feature
This release deprecates TypeCmp::with_any and TypeNe::with_any due to an unsoundness bug.
This release deprecates TypeCmp::with_any and TypeNe::with_any due to an unsoundness bug.
Deprecated {TypeCmp, TypeNe}::with_any due to unsoundness: both constructors rely on TypeId::of::<L>() != TypeId::of::<R>() implying L != R, which is not true in the general case.
Deprecated {TypeCmp, TypeNe}::with_any due to unsoundness: both constructors rely on TypeId::of::<L>() != TypeId::of::<R>() implying L != R, which is not true in the general case.
Deprecated eq methods of all marker types in const_marker module.
This release includes many new features, with these as the main ones:
TypeCmp enum for representing "TypeEq or TypeNe"TypeEq APIs in TypeNeTypeCmp/TypeEq/TypeNe methods in methods moduleThe changes since the 1.7 version
Added "rust_1_65" feature
Added BaseTypeWitness trait, which requires "rust_1_61" feature.
Added MetaBaseTypeWit enum, which requires "rust_1_61" feature.
Added these items to type_fn module:
InjTypeFn traitRevTypeFn traitFnRev type-level functionCallInjFn type aliasUncallFn type aliasAdded inj_type_fn macro
Added reexport of these in type_fn module:
inj_type_fn macrotype_fn macroAdded TypeCmp enum
Added these associated items to TypeEq:
with_any constructorto_cmp methodunmap methodunproject methodAdded type_ne macro
Added these associated items to TypeNe:
with_any constructorwith_fn constructorto_cmp methodflip methodjoin_left methodjoin_right methodmap methodproject methodunmap methodunproject methodin_mut methodin_ref methodin_array method (requires "rust_1_61" feature)zip method (requires "rust_1_61" feature)zip3 method (requires "rust_1_61" feature)zip4 method (requires "rust_1_61" feature)Removed the need to enable "const_marker" feature to enable const_marker module.
Added equals method to all marker types in const_marker module.
Deprecated eq methods of all marker types in const_marker module.
Added type_constructors module, which requires "rust_1_65" and includes these items:
BaseTypeWitnessTc traitTcTypeCmp structTcTypeEq structTcTypeNe structBaseTypeWitnessReparam type aliasBaseTypeWitnessToTc type aliasMapBaseTypeWitness type aliasTcToBaseTypeWitness type aliasAdded methods module, which requires "rust_1_65" and includes these items:
zipping modulein_array functionzip2 functionzip3 functionzip4 functionThe methods::zipping submodule (which requires "rust_1_65") contains:
Zip2 traitZip3 traitZip4 traitZip2Out type aliasZip3Out type aliasZip4Out type aliasAdded type_ne module, which contains:
TypeNetype_ne macroLeftArg marker typeRightArg marker typeAdded typewit_proc_macros optional dependency.
Added "proc_macros" feature, enabled by default, which enables typewit_proc_macros dependency.
Removed blanket impl of TypeFn for Fn (minor breaking change)
This release adds a polymatch macro.
(don't know how it took me until this release to start marking the releases on GitHub)
All of the changelog up to this point.
Added polymatch macro.
Added "adt_const_marker" feature.
Added BoolWit in typewit::const_marker
Added these structs in typewit::const_marker(under the "adt_const_marker" feature):
Str (unit struct)Added these structs in typewit::const_marker::slice(under the "adt_const_marker" feature):
BoolSlice (unit struct)CharSlice (unit struct)I8Slice (unit struct)I16Slice (unit struct)I32Slice (unit struct)I64Slice (unit struct)I128Slice (unit struct)IsizeSlice (unit struct)StrSlice (unit struct)U8Slice (unit struct)U16Slice (unit struct)U32Slice (unit struct)U64Slice (unit struct)U128Slice (unit struct)UsizeSlice (unit struct)Changed "nightly_mut_refs*" crate feature to enable the "rust_stable" feature.
Added support for these to simple_type_witness macro:
< > syntax[ ]-surrounded where clauses#[cfg(...)] attributes on variants and generic parameters__Wit in constraints.MakeTypeWitness impls)Added support for #[cfg(...)] attributes on generic parameters to type_fn macro.
Added Identity trait
Added type_fn macro.
Added "const_marker" feature, enabled by the default feature.
Added const_marker module, conditional on "const_marker" feature, with these items:
Bool (unit struct)Char (unit struct)I128 (unit struct)I16 (unit struct)I32 (unit struct)I64 (unit struct)I8 (unit struct)Isize (unit struct)U128 (unit struct)U16 (unit struct)U32 (unit struct)U64 (unit struct)U8 (unit struct)Usize (unit struct)Every type in const_marker defines an eq method, and implement Copy + Clone + Debug.
Added TypeNe type, with a new_unchecked constructor function.
TypeNe implements Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd.
Added TypeEq::{in_array, zip, zip3, zip4} methods
Added typewit::type_fn::FnIdentity type-level function.
Reduced Minimum Supported Rust Version to 1.57.0
Added "rust_stable" and "rust_1_61" features
Added type_fn::Invoke struct, which implements TypeFn.
Removed blanket impl of TypeFn for Fn(minor breaking change)
Declared TypeEq struct, with these associated items:
NEW (associated constant)flip (method)in_box (method)in_mut (method)in_ref (method)join (method)map (method)new (method)new_unchecked (method)project (method)reachability_hint (method)to_left (method)to_right (method)TypeEq implements Clone, Copy, Debug, Default, Eq, Hash, MakeTypeWitness, Ord, PartialEq, PartialOrd, TypeWitnessTypeArg.Declared type_eq function.
Declared HasTypeWitness, MakeTypeWitness, TypeWitnessTypeArg traits.
Declared simple_type_witness macro.
Declared type_fn module with these items:
TypeFn traitCallFn type aliasTypeFnTypeFnTypeFnDeclared these crate features:
allocmut_refsnightly_mut_refsSet the Minimum Supported Rust Version to 1.61.0
Added "adt_const_marker" feature.
Added "adt_const_marker" feature.
Added BoolWit in typewit::const_marker
Added these structs in typewit::const_marker(under the "adt_const_marker" feature):
Str (unit struct)Added these structs in typewit::const_marker::slice(under the "adt_const_marker" feature):
BoolSlice (unit struct)CharSlice (unit struct)I8Slice (unit struct)I16Slice (unit struct)I32Slice (unit struct)I64Slice (unit struct)I128Slice (unit struct)IsizeSlice (unit struct)StrSlice (unit struct)U8Slice (unit struct)U16Slice (unit struct)U32Slice (unit struct)U64Slice (unit struct)U128Slice (unit struct)UsizeSlice (unit struct)Changed "nightly_mut_refs*" crate feature to enable the "rust_stable" feature.
Added support for these to simple_type_witness macro:
Added support for these to simple_type_witness macro:
< > syntax[ ]-surrounded where clauses#[cfg(...)] attributes on variants and generic parameters__Wit in constraints.MakeTypeWitness impls)Added support for #[cfg(...)] attributes on generic parameters to type_fn macro.
Added Identity trait
Added Identity trait
Added type_fn macro.
Added type_fn macro.
Added "const_marker" feature, enabled by the default feature.
Added "const_marker" feature, enabled by the default feature.
Added const_marker module, conditional on "const_marker" feature, with these items:
Bool (unit struct)Char (unit struct)I128 (unit struct)I16 (unit struct)I32 (unit struct)I64 (unit struct)I8 (unit struct)Isize (unit struct)U128 (unit struct)U16 (unit struct)U32 (unit struct)U64 (unit struct)U8 (unit struct)Usize (unit struct)Every type in const_marker defines an eq method, and implement Copy + Clone + Debug.
Added TypeNe type, with a new_unchecked constructor function.
TypeNe implements Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd.
Added TypeEq::{in_array, zip, zip3, zip4} methods
Added typewit::type_fn::FnIdentity type-level function.
Nothing published for this version
Removed blanket impl of TypeFn for Fn(minor breaking change)
Reduced Minimum Supported Rust Version to 1.57.0
Added "rust_stable" and "rust_1_61" features
Added type_fn::Invoke struct, which implements TypeFn.
Removed blanket impl of TypeFn for Fn(minor breaking change)
Declared TypeEq struct, with these associated items:
Declared TypeEq struct, with these associated items:
NEW (associated constant)flip (method)in_box (method)in_mut (method)in_ref (method)join (method)map (method)new (method)new_unchecked (method)project (method)reachability_hint (method)to_left (method)to_right (method)
TypeEq implements Clone, Copy, Debug, Default, Eq, Hash, MakeTypeWitness, Ord, PartialEq, PartialOrd, TypeWitnessTypeArg.Declared type_eq function.
Declared HasTypeWitness, MakeTypeWitness, TypeWitnessTypeArg traits.
Declared simple_type_witness macro.
Declared type_fn module with these items:
TypeFn traitCallFn type aliasTypeFnTypeFnTypeFnDeclared these crate features:
allocmut_refsnightly_mut_refsSet the Minimum Supported Rust Version to 1.61.0
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →