В общем, вы не можете. #lang
языки строго более мощные, чем языки модулей, и на самом деле они являются надмножеством языков модулей. Язык, определенный с помощью #lang
, просто предоставляет функцию «читателя», которая принимает тело модуля как входную и создает форму (module ...)
в качестве вывода.
Для некоторых языков в экосистеме Racket, таких как #lang racket/base
и #lang racket
, это преобразование из источника в модуль чрезвычайно прост. В случае этих языков нет никакой разницы между #lang racket/base
и (module m racket/base ...)
. Тем не менее, для некоторых других языков синтаксис совершенно другой - он может даже не быть основанным на s-выражении! Например, рассмотрим Scribble и его синтаксис, вдохновленный LaTeX.
Это означает, что #lang
s имеет право контролировать читатель, кусок Ракетки, который анализирует исходный код, в то время как языки модуля имеет только право контролировать первоначальное пространство имена модуля.