Dedekind 0.0.0
A structuralist C++23 Module Library
Loading...
Searching...
No Matches
dedekind::category::Merge< A, Meet > Struct Template Referenceexport

Merge (the dagger of copy) Δ†:A×A→A, (a,b)↦a⊓b. The right adjoint of the diagonal; the value that IsMeetAsRightAdjoint certifies as the glb. More...

Public Types

using Domain = std::pair<A, A>
using Codomain = A

Public Member Functions

constexpr A operator() (const Domain &p) const
 Fold the copied pair through the injected glb Δ†(a,b)=a⊓b.

Detailed Description

template<typename A, typename Meet>
struct dedekind::category::Merge< A, Meet >

Merge (the dagger of copy) Δ†:A×A→A, (a,b)↦a⊓b. The right adjoint of the diagonal; the value that IsMeetAsRightAdjoint certifies as the glb.

Template Parameters
Athe carrier object.
Meetthe glb, injected: the order-algebra's meet, exactly as reduce<Term,Ord,Combine> injects it. No default and no :species dependency, so this partition does not reach into the :species value-op catalogue; the merge is whatever glb the caller supplies.

Member Function Documentation

◆ operator()()

template<typename A, typename Meet>
A dedekind::category::Merge< A, Meet >::operator() ( const Domain & p) const
inlineconstexpr

Fold the copied pair through the injected glb Δ†(a,b)=a⊓b.

Parameters
pthe pair (a,b) to merge.
Returns
Meet{}(a,b), the injected order-algebra meet.
Note
The requires clause probes Meet on the call so an ill-formed injected op (a Meet with no operator()(A,A)) removes operator() from the overload set. IsArrow then fails for that Merge, so IsMerge rejects it at the concept surface rather than only at a later call site (#946 review).

The documentation for this struct was generated from the following file: