3
votes

I've been using the following language definition file, eopl-printing.rkt,

#lang racket
    (require (except-in eopl #%module-begin))
    (provide (all-from-out eopl))
    (provide #%module-begin)
as suggested in DrRacket EOPL Scheme output. All has being going well, except when I try to invoke an exn function as in:
#lang s-exp "eopl-printing.rkt"
(require rackunit)
(check-exn
   exn:fail?
   (lambda ()
     (error 'hi "there")))

Instead of the test passing successfully as expected, I get a "exn:fail?: unbound identifier ..." message. I've read the documentation on modules and tried various ways to try to re-expose the Racket exn definitions but without any luck. Any suggestions?

1

1 Answers

4
votes

The eopl-printing.rkt file defines a language that only includes the bindings from the eopl library plus #%module-begin from racket but nothing else.

But you can still easily import racket bindings in any file written in the eopl-printing.rkt language:

#lang s-exp "eopl-printing.rkt"
(require rackunit)
(require racket)
(check-exn
   exn:fail?
   (lambda ()
     (error 'hi "there")))

Alternatively, you can have your eopl-printing.rkt language provide the additional racket forms that you want:

#lang racket
(require (except-in eopl #%module-begin))
(provide (all-from-out eopl))
(provide #%module-begin exn:fail? error)

Or just re-provide everything in racket:

#lang racket
(require (except-in eopl #%module-begin))
(provide (all-from-out eopl))
(provide (all-from-out racket))