<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16525" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face="Courier New" size=2>Hi,</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Given a&nbsp;module that wants to provide 
an opaque struct-type. When required from a module there is no way&nbsp;to 
circumvent the opaqueness, because the invoked module is executed before the 
invoking unit is executed. Hence the invoking unit cannot play with inspectors 
before the invoked unit is executed. But at top level it is possible to 
circumvent the opaqueness. See the example below. Is this simply a top level 
problem, or is there a some way to make structs provided by a module realy 
opaque for the top level?</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Jos Koot</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>; module a required within module 
b<BR>(module a mzscheme<BR>&nbsp;(define-struct a () 
#;(current-inspector))<BR>&nbsp;(provide (all-defined)))<BR>(module b 
mzscheme<BR>&nbsp;(define ci (current-inspector))<BR>&nbsp;(current-inspector 
(make-inspector))<BR>&nbsp;(require a)<BR>&nbsp;(current-inspector 
ci)<BR>&nbsp;(printf "~s~n" (struct? (make-a)))) ; #f, ok<BR>(require 
b)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>; module c required at top level<BR>(module 
c mzscheme<BR>&nbsp;(define-struct c () #;(current-inspector))<BR>&nbsp;(provide 
(all-defined)))<BR>(define ci (current-inspector))<BR>(current-inspector 
(make-inspector))<BR>(require c)<BR>(current-inspector ci)<BR>(printf "~s~n" 
(struct? (make-c))) ; #t</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT>&nbsp;</DIV></BODY></HTML>