I’m trying to use the database library db with TR, and I’ve run into a problem 
whose only workaround seems really nasty.

Specifically, it concerns vectors (or lists, presumably) that contain opaque 
values. So, for instance, here’s foo1.rkt:

#lang racket

(provide return-a-list)

(struct my-struct ())

(define (return-a-list)
  (vector 13 (my-struct) 15))

… and here’s foo2.rkt:

#lang typed/racket

(require/typed "foo1.rkt"
               [return-a-list (-> (Vectorof Any))])

(return-a-list)

Running foo2.rkt produces this error:

. . return-a-list: contract violation
  Attempted to use a higher-order value passed as `Any` in untyped code: 
#<my-struct>
  in: an element of
      the range of
      (-> (vectorof Any))
  contract from: (interface for return-a-list)
  blaming: /private/tmp/foo2.rkt
   (assuming the contract is correct)
  at: /private/tmp/foo2.rkt:4.16

Making “my-struct” transparent solves this problem, but the problem arises for 
me in the use of db’s #<sql-null>, which I can’t mess with.

Frankly, it looks like the easiest workaround is just … not to use TR here. Am 
I missing something obvious? Also, I’d love a bit more explanation of how this 
breaks TR’s type safety guarantee.

Thanks!

John



-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to