有没有办法从SML / NJ REPL获取顶级环境中可用的signature
或structure
列表?我希望得到一个似乎在sml源目录的sources.cm
文件中定义的签名/结构列表。
- signature s = LIST;
仅在顶级环境中列出绑定。
答案 0 :(得分:5)
您可以使用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
不会返回可用但尚未加载的模块的符号名称:
- boundSignatures ();
ENVREF
val it = () : unit
- signature S = STATICENV;
[autoloading]
[autoloading done]
- boundSignatures ();
STATICENV
ENVREF
S
val it = () : unit