         { { +vector+ -> +vector+ } A-v->v-op }
         { { +vector+ -> +scalar+ } A-v->n-op }
         { { +vector+ -> +nonnegative+ } A-v->n-op }
-    } >>wrappers
+    } >>schema-wrappers
 (define-simd-128)
 
 PRIVATE>

A-rep        [ A/2 name>> "-rep" append "cpu.architecture" lookup ]
A-vv->v-op   DEFINES-PRIVATE ${A}-vv->v-op
A-vn->v-op   DEFINES-PRIVATE ${A}-vn->v-op
A-vv->n-op   DEFINES-PRIVATE ${A}-vv->n-op
A-v->v-op    DEFINES-PRIVATE ${A}-v->v-op
A-v->n-op    DEFINES-PRIVATE ${A}-v->n-op

WHERE


    ! in the general case.
    elt-class float = [ { distance [ v- norm ] } suffix ] when ;

TUPLE: simd class elt-class ops special-wrappers schema-wrappers ctor rep ;

: define-simd ( simd -- )
    dup rep>> rep-component-type c:c-type-boxed-class >>elt-class
    {
        [ class>> ]
        [ elt-class>> ]
        [ [ ops>> ] [ special-wrappers>> ] [ schema-wrappers>> ] tri low-level-ops ]
        [ rep>> supported-simd-ops ]
        [ [ ctor>> ] [ elt-class>> ] bi high-level-ops assoc-union ]
    } cleave
