Suppress “val it” output in Standard ML

倖福魔咒の 提交于 2019-12-04 00:48:13

问题


I'm writing a "script" in Standard ML (SML/NJ) that sets up the interactive environment to my liking. The last thing the script does is print out a message indicating everything went smoothly. Essentially, the last line is this:

print "SML is ready.\n";

When I run the script, all goes well but the SML interpreter displays the return value from the print function.

SML is ready.
val it = () : unit
-

Since I'm merely printing something to the screen, how can I suppress the "val it = () : unit" output so that all I see is the "SML is ready" message followed by the interpreter prompt?


回答1:


To surpress the SML-NJ prompt and response, use the following assignment.

Compiler.Control.Print.out := {say=fn _=>(), flush=fn()=>()};
print "I don't show my type";

I don't show my type

although I don't see why the print function returning the type is bad.

The say function controls what is printed out.

There is a larger example in the following SML/NJ notes http://www.cs.cornell.edu/riccardo/prog-smlnj/notes-011001.pdf

The useSilently function can be used to load a file but without displaying any output associated with the loading

fun useSilently (s) = let
val saved = !Compiler.Control.Print.out
fun done () = Compiler.Control.Print.out := saved
in
Compiler.Control.Print.out := {say = fn _ => (), flush = fn () => ()}
(use (s); done ()) handle _ => done ()
end

This is essentially changing the say function to do nothing and then setting it back at the end.




回答2:


Use this:

val _ = print "I don't show my type";



回答3:


In Moscow ML you can run the REPL without declaration output with

mosml -quietdec file.sml


来源:https://stackoverflow.com/questions/1265171/suppress-val-it-output-in-standard-ml

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!