То же объявление, которое предлагает @kvb, должно работать и на верхнем уровне:
#light "off"
module Foo = begin
let rec f a = g (a + 1)
and g a = f (a + 1)
end
Может быть, компилятор смущен каким-то другим кодом, который следует вашим объявлениям?
РЕДАКТИРОВАТЬ: О, проблема немного в другом - вы хотели написать рекурсивное объявление в одной строке в режиме #light
. Я не мог найти никакого способа сделать это, и я думаю, что это может быть невозможно в режиме #light
. На практике вы всегда можете написать многострочное объявление (даже в каком-то странном контексте):
if true && (let rec f x = g x
and g x = f x in f) 0 then
printfn "funny"