Para responder a essa pergunta, vamos supor que o custo da ambiguidade na mente de um programador seja muito mais caro do que algumas teclas extras.
Dado isso, por que eu permitiria que meus colegas de equipe não anotassem seus parâmetros de função? Tome o código a seguir como um exemplo do que poderia ser um pedaço de código muito mais complexo:
let foo x y = x + y
Agora, um rápido exame da dica mostrará que o F # determinou que você pretendia que x e y fossem ints. Se é isso que você pretendia, tudo está bem. Mas eu não sei se é isso que você pretendia. E se você tivesse criado esse código para concatenar duas strings juntas? Ou então, se eu acho que você provavelmente pretendia adicionar duplas? Ou, se eu simplesmente não quiser passar o mouse sobre cada parâmetro de função para determinar seu tipo?
Agora tome isso como um exemplo:
let foo x y = "result: " + x + y
O F # agora supõe que você provavelmente pretendeu concatenar cadeias de caracteres, então x e y são definidos como cadeias de caracteres. No entanto, como o pobre coitado que está mantendo seu código, eu posso olhar para isso e me perguntar se talvez você pretendesse adicionar x e y (ints) juntos e depois anexar o resultado a uma string para fins de interface do usuário.
Certamente, para exemplos tão simples, é possível deixar para lá, mas por que não impor uma política de anotação explícita de tipo?
let foo (x:string) (y:string) = "result: " + x + y
Que mal há em ser inequívoco? Claro, um programador poderia escolher os tipos errados para o que eles estão tentando fazer, mas pelo menos eu sei que eles pretendiam, que não era apenas uma supervisão.
Essa é uma pergunta séria ... Ainda sou muito novo no F # e estou abrindo caminho para a minha empresa. Os padrões que eu adotar provavelmente serão a base para toda a futura codificação de F #, incorporada na infinita cópia de pasta que tenho certeza de que permeará a cultura nos próximos anos.
Então ... existe algo especial na inferência de tipo do F # que o torna um recurso valioso para se agarrar, anotando apenas quando necessário? Ou os especialistas em F # têm o hábito de anotar seus parâmetros para aplicativos não triviais?