向 SML/NJ REPL 查询签名或结构?

Query the SML/NJ REPL for signatures or structures?

有没有办法从 SML/NJ REPL 获取顶级环境中可用的 signaturestructure 的列表?我正在寻找似乎在 sml 源目录的 sources.cm 文件中定义的 signatures/structures 的列表。类似于

- signature s = LIST;

只列出顶级环境中的绑定。

您可以利用 SML/NJ 提供的 internal structures

fun boundSignatures () =
  let
    fun isSignature symbol = Symbol.nameSpace symbol = Symbol.SIGspace
    val signatures = List.filter isSignature (EnvRef.listBoundSymbols ())
  in
    List.app (fn s => print (Symbol.name s ^ "\n")) signatures
  end

请注意,由于自动加载,EnvRef.listBoundSymbols 不会 return 可用但尚未加载的模块的符号名称:

- boundSignatures ();
ENVREF
val it = () : unit
- signature S = STATICENV;
[autoloading]
[autoloading done]
- boundSignatures ();
STATICENV
ENVREF
S
val it = () : unit