Почему функции F # оцениваются перед вызовом?

Если я определю модуль как таковой:

module Module1
open System

let foo =
    Console.WriteLine("bar")

Затем в интерактивном режиме

#load "Library1.fs" //where the module is defined
open Module1

я вижу

Панель [Загрузка c: \ users \ jj \ Documents \ visual studio 2015 \ Projects \ Library1 \ Library1 \ Library1.fs]

Указывая, что функция foo работала без меня, даже не вызывая ее!

Как / почему это происходит? Есть ли способ предотвратить это?

Я знаю, что возвращаемое значение foo равно какому-либо значению (Console.Writeline ("bar")), и что нет никаких причин, которые нельзя оценить "немедленно?" (наверное, когда модуль загружен?) - но есть ли способ предотвратить это? Если функции моего модуля изменяют состояние некоторых других вещей, могу ли я гарантировать, что они не будут обрабатываться до тех пор, пока не будут вызваны?

Ответы на вопрос(2)

Ваш ответ на вопрос