There is with ATS2, something reminding a feature Pascal had with Write and WriteLn. ATS2 uses an exclamation mark as a suffix for this:
val () = print!("abc", "def", "ghi") // Generates an implicit sequence
is implicitly the same as:
val () = (print("abc"); print("def"); print("ghi")) // No more exclamation mark, that’s the raw `print`.
The first case applies on multiple arguments generating an implicit sequence (ATS2 sources says the second idiomatic construct is named a sequence)
For documenting purpose, I tried to define one such function as example, but it fails, Patsopt always complains some external symbol cannot be handled, where the external symbol is the name of the function I try to define and use with an exclamation mark as a suffix:
fn f(c:char): void = ()
val () = (f('a'); f('b'); f('c')) // OK
val () = f!('a', 'b', 'c') // Says “the external id [f] cannot be handled.”
May be it’s just not accessible to user defined function?