Я не совсем понимаю сценарий, который вы описываете - функции F #, объявленные в модуле, обычно отображаются как методы, а значения отображаются как свойства. Код, который выполняется при первом обращении к модулю (инициализация типа), является инициализацией значений.
Если вы напишите просто:
module Foo =
let Operation () =
printfn "hello"
... тогда вызов Operation
будет методом, а вызов Foo.Operation()
вызовет побочный эффект. Если вы можете опубликовать некоторый код, который ведет себя неожиданно, тогда кто-то может объяснить это.
В любом случае, если вы хотите быть уверены в поведении, вы можете написать операции как статические члены класса:
type Foo =
static member Operation() =
printfn "hello"
Тогда вы можете быть уверены, что F # скомпилирует их как статические члены класса предсказуемым образом.