Básico Sobre Inferência de Tipos em F#

Adelar da Silva Queiróz
2 min readJun 5, 2021

F# é uma linguagem fortemente tipada. Ou seja, todos os dados possuem tipos definidos em tempo de compilação.

Apesar disso não é necessário dizer que tipos serão usados, devido à uma característica peculiar da linguagem, a inferência de tipos.

O compilador tentará descobrir que tipo pode ser usado sempre que possível.

Vejamos como funciona:

🐚 dotnet fsi

Microsoft (R) F# Interactive version 11.3.2.0 for F# 5.0
Copyright © Microsoft Corporation. All Rights Reserved.

For help type #help;;

> let nome:string=”Eliz”;;
val nome : string = “Eliz”

Neste caso foi definida uma variável e dizemos que o tipo dela é string. Entretanto definir o tipo não é necessário:

> let nome=”Eliz”;;
val nome : string = “Eliz”

O tipo de nome foi definido como string mesmo sem defini-lo explicitamente! O que acontece é que o compilador vê o que está sendo passado do lado direito da expressão e atribui o tipo, tudo em tempo de compilação.

Mas tem coisa mais interessante. Veja o trecho a seguir:

> type Pessoa={Nome: string};;
type Pessoa =
{ Nome: string }

> let nome a = a.Nome;;
val nome : a:Pessoa -> string

No trecho acima definimos um tipo Pessoa que armazena um dado de tipo string.

Em seguida criamos uma função chamado nome que retorna o dado Nome dentro do tipo Pessoa.

Note que mesmo sem dizer que o argumento da função a é um tipo Pessoa o compilador foi capaz de identificar que a é deste tipo e Nome é uma string!

Vamos colocar outro dado dentro do tipo Pessoa e ver se funciona:

> type Pessoa={Nome: string; CPF: int};;
type Pessoa =
{ Nome: string
CPF: int }

> let cpf a = a.CPF;;
val cpf : a:Pessoa -> int

Funciona! Mesmo sem saber que a era um tipo Pessoa o compilador foi capaz de identificar os tipos corretamente!

Até a próxima!

--

--

Adelar da Silva Queiróz

I’m a software enginner living on Cascavel, Brazil. I work with mainly all things related with software.