         { { +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>

    [ [ [ underlying2>> ] dip A-rep ] dip call ] 3bi
    \ A boa ; inline

: A-vv->n-op ( v1 v2 quot -- v3 )
    [ [ [ underlying1>> ] bi@ A-rep ] dip call ]
    [ [ [ underlying2>> ] bi@ A-rep ] dip call ] 3bi
    + ; inline

: A-v->v-op ( v1 combine-quot -- v2 )
    [ [ underlying1>> A-rep ] dip call ]
    [ [ underlying2>> A-rep ] dip call ] 2bi
    \ A boa ; inline

: A-v->n-op ( v1 combine-quot -- v2 )
    [ [ underlying1>> ] [ underlying2>> ] bi A-rep (simd-v+) A-rep ] dip call ; inline

simd new
    \ A >>class
    \ A-with >>ctor
    \ A-rep >>rep
    {
        { { +vector+ +vector+ -> +vector+ } A-vv->v-op }
        { { +vector+ +scalar+ -> +vector+ } A-vn->v-op }
        { { +vector+ +literal+ -> +vector+ } A-vn->v-op }
        { { +vector+ +vector+ -> +scalar+ } A-vv->n-op }
        { { +vector+ -> +vector+ } A-v->v-op }
        { { +vector+ -> +scalar+ } A-v->n-op }
        { { +vector+ -> +nonnegative+ } A-v->n-op }
    } >>wrappers
(define-simd-256)

;FUNCTOR

    '[ nip _ swap supported-simd-op? ] assoc-filter
    '[ drop _ key? ] assoc-filter ;

ERROR: bad-schema op schema ;

:: op-wrapper ( op specials schemas -- wrapper )
    op {
        [ specials at ]
        [ word-schema schemas at ]
        [ dup word-schema bad-schema ]
    } 1|| ;

: low-level-ops ( simd-ops specials schemas -- alist )
    '[ 1quotation over _ _ op-wrapper [ ] 2sequence ] assoc-map ;

:: high-level-ops ( ctor elt-class -- assoc )
    ! Some SIMD operations are defined in terms of others.
