     [ effect-in-types unboxed-types [ "in" swap 2array ] map ]
     [ effect-out-types unboxed-types [ "out" swap 2array ] map ] bi <effect> ;
 
-PREDICATE: typed-standard-word < word "typed-word" word-prop ;
-PREDICATE: typed-lambda-word < lambda-word "typed-word" word-prop ;
-
 M: typed-gensym stack-effect
     call-next-method unboxed-effect ;
 M: typed-gensym crossref? 
     "typed-gensym" word-prop crossref? ;
 
 : define-typed-gensym ( word def effect -- gensym )
-    [ 2drop typed-gensym dup ]
+    [ 2drop <typed-gensym> dup ]
     [ [ (typed) ] 3curry ]
     [ 2nip ] 3tri define-declared ;
 

        dup typed-stack-effect? [ typed-outputs ] [ 2drop ] if
    ] 2bi ;

PREDICATE: typed-gensym < word "typed-gensym" word-prop ;

: typed-gensym ( parent-word -- word )
    [ name>> "( typed " " )" surround f <word> dup ]
    [ "typed-gensym" set-word-prop ] bi ;


ERROR: type-mismatch-error word expected-types ;
ERROR: input-mismatch-error < type-mismatch-error ;
ERROR: output-mismatch-error < type-mismatch-error ;

PREDICATE: typed-gensym < word "typed-gensym" word-prop ;
PREDICATE: typed-standard-word < word "typed-word" word-prop ;
PREDICATE: typed-lambda-word < lambda-word "typed-word" word-prop ;

<PRIVATE

: unboxable-tuple-class? ( type -- ? )
    {
