Полагаю, сбивает с толку то, что во второй версии переменная A
это просто unit
.Компилятор F # выводит это из того факта, что вы возвращаете A
из функции, которая используется как th
, а тип th
равен unit -> unit
.Это означает, что foo
вызывается в Start
перед входом в XD
.
Однако, довольно сложно определить, каких результатов вы ожидали.Вы хотели передать foo
в XD
как функцию вместо немедленного вызова?Если да, то вам нужно:
let internal XD A =
let X th =
foo()
th()
bar()
(X <| fun () -> A()) // Change: Call A with unit argument: 'A ()'
XD foo // Change: Pass a function instead of calling it