Concepts
Compile-time validation of type constraints
Install / Use
/learn @phan-do/ConceptsREADME
Concepts
The Concepts library provides compile-time validation of type constraints.
Contents
Overview
A trait is a property of a type (e.g., isIntegral). A concept is a named set
of traits (e.g., integral).
const std = @import("std");
const concepts = @import("concepts");
pub fn main() anyerror!void {
comptime {
concepts.integral(i32);
concepts.same(i32, i32);
arrayList(std.ArrayList(u8));
arrayList(std.ArrayListUnmanaged(u8)); // error: concept `ArrayList` was not satisfied
}
}
/// arrayList is a concept that requires `T` to be a `std.ArrayList`.
fn arrayList(comptime T: type) void {
comptime concepts.Concept("ArrayList", "")(.{
concepts.traits.hasDecl(T, "Slice"),
concepts.traits.isSlice(T.Slice),
concepts.traits.isSame(T, std.ArrayList(std.meta.Child(T.Slice))),
});
}
Installation
Manual
-
Install the library.
git clone https://github.com/ibokuri/concepts lib/concepts -
Add the library as a package in
build.zig.const std = @import("std"); pub fn build(b: *std.build.Builder) void { ... obj.setTarget(target); obj.setBuildMode(mode); + obj.addPackagePath("concepts", "lib/concepts/src/lib.zig"); obj.install(); }
Gyro
-
Install the library.
gyro add -s github ibokuri/concepts gyro fetch gyro update -
Add the library as a package in
build.zig.const std = @import("std"); +const pkgs = @import("deps.zig").pkgs; pub fn build(b: *std.build.Builder) void { ... obj.setTarget(target); obj.setBuildMode(mode); + pkgs.addAllTo(obj); obj.install(); }
API Reference
concepts
General
err- Generates a compile error due to an invariant violation during concept validation.fail- Generates a compile error due to a concept being unsatisfied.
Concepts
container- Specifies that a type is a container type.decl- Specifies that a type contains a given declaration.extern- Specifies that a type has anexternin-memory layout.field- Specifies that a type contains a given field.float- Specifies that a type is a floating-point type.integral- Specifies that a type is an integral type.method- Specifies that a type contains a given function.packed- Specifies that a type has apackedin-memory layout.same- Specifies that a type is the same as another type.signedIntegral- Specifies that a type is an integral type that is signed.slice- Specifies that a type is a slice type.string- Specifies that a type is a string type.tuple- Specifies that a type is a tuple type.unsignedIntegral- Specifies that a type is an integral type that is unsigned.
concepts.traits
Traits
hasDecl- Checks if a type contains a given declaration.hasDecls- Checks if a type contains a given set of declarations.hasField- Checks if a type contains a given field.hasFields- Checks if a type contains a given set of fields.hasFunction- Checks if a type contains a given function.hasFunctions- Checks if a type contains a given set of functions.isContainer- Checks if a type is a container type.isExtern- Checks if a type has anexternin-memory layout.isFloat- Checks if a type is a floating-point type.isIntegral- Checks if a type is an integral type.isPacked- Checks if a type has apackedin-memory layout.isSame- Checks if two types are equal.isSignedIntegral- Checks if a type is an integral type that is signed.isSlice- Checks if a type is a slice type.isString- Checks if a type is a string type.isTuple- Checks if a type is a tuple type.
License
See LICENSE for more detail.
Related Skills
node-connect
347.6kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
108.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.6kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.6kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
