#lang racket ;; Thanks for Michael Ballantyne for translating the lecture example to Racket (module m1 racket (provide (contract-out [double (-> (-> integer? integer?) integer?)])) (define (double f) (f (f 0)))) (module m2 racket (provide (contract-out [pos (-> integer? boolean?)])) (define (pos i) (if (< i 0) #f #t))) (module m3 racket (require (submod ".." m1) (submod ".." m2)) (double pos)) (require 'm3)