smlfmt
smlfmt copied to clipboard
Heuristic for placing fun decl body on separate line
The heuristic for determining whether the body of a function declaration is placed on a newline seems rather conservative and can lead to seemingly wasted horizontal space, especially when mixed with val declarations that do not seem to use the same heuristic.
❯ smlfmt -max-width 45 --preview-only z.sml
---- z.sml ----
infixr 1 $
val f = fn (g, x) => x
val f = fn (g, x) => g x
val f = fn (g, x) => g $ x
val f = fn (g, x) => g $ g x
val f = fn (g, x) => g $ g $ x
val f = fn (g, x) => g $ g $ g x
val f = fn (g, x) => g $ g $ g $ x
val f = fn (g, x) => g $ g $ g $ g x
val f = fn (g, x) => g $ g $ g $ g $ x
val f = fn (g, x) => g $ g $ g $ g $ g x
val f = fn (g, x) => g $ g $ g $ g $ g $ x
val f = fn (g, x) => g $ g $ g $ g $ g $ g x
val f = fn (g, x) =>
g $ g $ g $ g $ g $ g $ x
fun f (g, x) = x
fun f (g, x) = g x
fun f (g, x) = g $ x
fun f (g, x) = g $ g x
fun f (g, x) = g $ g $ x
fun f (g, x) =
g $ g $ g x
fun f (g, x) =
g $ g $ g $ x
fun f (g, x) =
g $ g $ g $ g x
fun f (g, x) =
g $ g $ g $ g $ x
fun f (g, x) =
g $ g $ g $ g $ g x
fun f (g, x) =
g $ g $ g $ g $ g $ x
fun f (g, x) =
g $ g $ g $ g $ g $ g x
fun f (g, x) =
g $ g $ g $ g $ g $ g $ x
--------
Ah good point -- I hadn't checked if these two heuristics are consistent with each other.