Avaliação da função de atraso em F #

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