 
 : (unboxer) ( type -- quot )
     dup unboxable-tuple-class? [
+        dup dup tuple-layout depends-on-tuple-layout
         all-slots [
             [ name>> reader-word 1quotation ]
             [ class>> (unboxer) ] bi compose

    [ 2nip ] 3tri define-declared ;

MACRO: typed ( quot word effect -- quot' )
    [ effect-in-types (depends-on) dup typed-stack-effect? [ typed-inputs ] [ 2drop ] if ] 
    [
        nip effect-out-types (depends-on) dup typed-stack-effect?
        [ [ unboxed-types ] [ make-boxer ] bi '[ @ _ declare @ ] ] [ drop ] if
    ] 2bi ;



: (unboxed-types) ( type -- types )
    dup unboxable-tuple-class?
    [
        dup dup tuple-layout depends-on-tuple-layout
        all-slots [ class>> (unboxed-types) ] map concat
    ]
    [ 1array ] if ;

: unboxed-types ( types -- types' )
