typed-racket/typed-racket-test/succeed/unsafe-require.rkt
2015-10-16 15:52:21 -04:00

40 lines
1.2 KiB
Racket

#lang racket/base
;; Test unsafe require forms
(module a racket/base
(struct foo (x y))
(define a-foo (foo 1 2))
(provide (struct-out foo) a-foo))
(module b typed/racket
(require/typed racket/contract/combinator [#:opaque Blame exn:fail:contract:blame?])
(require typed/racket/unsafe)
(unsafe-require/typed (submod ".." a)
[#:struct foo ([x : String] [y : String])]
[a-foo foo])
;; UNSAFE
;; primitive error, no blame should be raised
(with-handlers ([(negate exn:fail:contract:blame?) void])
(string-append (foo-x a-foo))))
(module c typed/racket
(require/typed racket/contract/combinator [#:opaque Blame exn:fail:contract:blame?])
(require typed/racket/unsafe)
(unsafe-require/typed racket/base
[string-append (-> String String Integer)])
(unsafe-require/typed racket/list
;; test a keyword function, which expands differently
[check-duplicates
(->* [(Listof Any)] [(-> Any Any Any) #:key (-> Any Any)] Any)])
;; not unbound
check-duplicates
;; UNSAFE
(with-handlers ([(negate exn:fail:contract:blame?) void])
(number->string (string-append "foo" "bar"))))
(require 'b 'c)