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.