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

pic*_*ick 4 sml smlnj

有没有办法从SML/NJ REPL获取顶级环境中可用的signatures或structures 列表?我希望得到一个似乎sources.cm在sml源目录中的文件中定义的签名/结构的列表.有点像

- signature s = LIST;
Run Code Online (Sandbox Code Playgroud)

仅在顶级环境中列出绑定.

Ion*_*tan 5

您可以使用SML/NJ提供的内部结构:

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
Run Code Online (Sandbox Code Playgroud)

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

- boundSignatures ();
ENVREF
val it = () : unit
- signature S = STATICENV;
[autoloading]
[autoloading done]
- boundSignatures ();
STATICENV
ENVREF
S
val it = () : unit
Run Code Online (Sandbox Code Playgroud)