 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 -- ? )
     {

        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 ;


        [ effect-out-types typed-stack-effect? ]
    } 1|| [ (typed-def) ] [ drop nip ] if ;

PRIVATE>

: define-typed ( word def effect -- )
    [ [ 2drop ] [ typed-def ] [ 2nip ] 3tri define-inline ] 
    [ drop "typed-def" set-word-prop ]
