Descobri ocasiões em que preferia passar uma função “pelo nome” em vez de avaliá-la … infelizmente, como o F # é avidamente avaliado, você não pode fazer isso sem envolver as coisas em um (fun () -> myFunction arg1)
tipo de construção. Eu particularmente não gosto dessa sintaxe, mas o seguinte parece muito mais agradável:
let inline delayed f a= fun () -> f(a)
Agora você pode usar:
delayed myFunction arg1
As coisas ficam um pouco mais feias com mais argumentos
delayed (myFunction arg1 arg2 arg3) arg4
Mas você também pode criar um operador que o torne um pouco menos descolado
let (<?) f a = delayed f a
E então você poderia usar
myFunction arg1 arg2 arg3 <? arg4