У F# усе, що має тип і може бути визначене, називається значенням. Сюди належать булеві значення (англ. Boolean), цілі числа і масиви, але також і функції. Цілі числа визначаються як одна або більше (послідовних) цифр і підтримують типові математичні оператори.
Присвоєння значення імені називається звʼязуванням. Звʼязування є незмінними, що робить їх схожими на константи в інших мовах. Звʼязування визначаються за допомогою ключового слова let.
Оскільки F# належить до статично типізованих мов, кожне звʼязування має тип. Зазначати тип звʼязування необовʼязково для більшості звʼязувань, адже виведення типів у F# зазвичай дає змогу визначити тип на основі значення.
// Automatically inferred type
let fingers = 10
Функції теж є звичайними звʼязуваннями, але з одним або кількома параметрами. Функція автоматично повертає свій останній вираз. Виведення типів працює і для більшості функцій: воно аналізує, з якими значеннями функцію викликають і яке значення вона повертає.
// Automatically inferred types for parameters and return type
let add x y = x + y
Щоб викликати функцію, треба вказати її назву й передати аргументи для кожного з її параметрів.
let five = add 2 3
Якщо тип звʼязування не вдається вивести, компілятор повідомить про помилку. Щоб це виправити, вкажімо тип звʼязування явно.
// Explicit type annotation
let fingers: int = 10
// Explicit type annotation (also for parameters)
let add (x: int) (y: int): int = x + y
Звʼязування у F# можна використовувати лише після того, як їх визначено. Використання звʼязування до того, як його визначено, призводить до помилки компіляції.
// Compile error as the add binding has not yet been defined
// let seven = add 3 + 4
let add x y = x + y
Для визначення області видимості використовуються значущі відступи: код відступає пробілами відносно рядка, який оголошує звʼязування. Типова домовленість - використовувати для відступу чотири пробіли.
let toes =
let left = 5
let right = 5
left + right
let multiplyPlusTwo x y =
let product = x * y
product + 2
// Trying to access the left, right or product bindings
// here would result in a compile error
Звʼязування у F# (зокрема функції) зазвичай організовано в модулі. Модуль обʼєднує споріднену функціональність і визначається за допомогою ключового слова module. Визначення модуля має передувати його звʼязуванням:
module Calculator
let pi = 3.14
let add x y = x + y
F# підтримує два типи коментарів. Однорядкові коментарі починаються з //, а багаторядкові розміщують між (* і *).