Одной из возможностей является использование шаблонов. Например,
fun{} foo$y(): bool
fun{} foo(x: int): bool
implement{} foo$y() = false
implement{} foo(x) = let val y = foo$y() in ... end
Это на самом деле более гибкое, чем просто поддержка значения по умолчанию для аргумента функции. Например, Foo $ у может быть повторно реализована позже:
implement{} foo$(y) = true
Что еще более важно, Foo $ у может быть реализован в теле функции вызова Foo:
fun bar(...) = let
implement foo$y() = ...
in
...foo(...)...
end // end of [bar]