Quando usar ponto-e-vírgula no SML?

Eu sei que os ponto-e-vírgulas são usados ​​como terminadores no REPL. Mas estou confuso sobre quando usá-los em um arquivo de origem.

Por exemplo, não é necessário depoisval x = 1. Mas se eu omitir isso depoisuse "foo.sml", o compilador irá reclamar sobre isso.

Então, quais são as regras sobre o uso de ponto e vírgula?