diff --git a/collects/typed-scheme/private/type-contract.rkt b/collects/typed-scheme/private/type-contract.rkt index dd59522a..5c4b9278 100644 --- a/collects/typed-scheme/private/type-contract.rkt +++ b/collects/typed-scheme/private/type-contract.rkt @@ -134,7 +134,9 @@ [(Vector: t) #`(vectorof #,(t->c t #:flat #t))] [(Box: t) - #`(box/c #,(t->c t #:flat #t))] + (if flat? + #`(box/c #,(t->c t #:flat #t) #:flat? #t) + #`(box/c #,(t->c t)))] [(Pair: t1 t2) #`(cons/c #,(t->c t1) #,(t->c t2))] [(Opaque: p? cert) @@ -206,7 +208,10 @@ [(Syntax: t) #`(syntax/c #,(t->c t))] [(Value: v) #`(flat-named-contract #,(format "~a" v) (lambda (x) (equal? x '#,v)))] [(Param: in out) #`(parameter/c #,(t->c out))] - [(Hashtable: k v) #`(hash/c #,(t->c k #:flat #t) #,(t->c v #:flat #t) #:immutable 'dont-care)] + [(Hashtable: k v) + (if flat? + #`(hash/c #,(t->c k #:flat #t) #,(t->c v #:flat #t) #:flat? #t #:immutable 'dont-care) + #`(hash/c #,(t->c k) #,(t->c v) #:immutable 'dont-care))] [else (exit (fail))]))))