$ cat stuff-box.scm (module stuff-box () (import scheme) (define (stuff-box) (let ((stuff '())) (lambda (cmd . args) (case cmd ((stuff) stuff) ((add-stuff!) (set! stuff (append args stuff))))))) (define stuff (stuff-box)) (stuff 'add-stuff! "foo") (car (stuff 'stuff)) ) $ csc stuff-box.scm Warning: Invalid argument In file `stuff-box.scm:14', At the toplevel, In procedure call: (scheme#car (stuff-box#stuff 'stuff)) Argument #1 to procedure `car' has an invalid type: undefined The expected type is: pair It is a call to `stuff' from module `stuff-box' which has this type: (* #!rest -> undefined) This is the expression: (stuff-box#stuff 'stuff) Procedure `car' from module `scheme' has this type: ((pair 'a *) -> 'a)