F Sharp
F# або F Sharp — це функціональна, статично типізована й мультипарадигмальна мова програмування для платформи .NET.
F# поєднує функціональний стиль із можливістю використовувати об’єктно-орієнтовані та імперативні підходи. Він добре підходить для domain modeling, data processing, фінансових систем, аналітики, компіляторів, DSL, backend-сервісів, type-safe API, тестування бізнес-правил і задач, де важливо чітко описати допустимі стани системи.
Коротко: F# — це функціональна мова на .NET, яка дозволяє писати короткий, виразний і типобезпечний код. Її головна сила — records, discriminated unions, pattern matching, type inference і зручне моделювання домену.
Microsoft Learn описує F# як мову програмування для .NET, яка підтримує functional, object-oriented та imperative programming models. [1]
Головна ідея
Головна ідея F# — дати розробнику силу функціонального програмування всередині .NET-екосистеми.
F# дозволяє:
- описувати бізнес-правила через типи;
- уникати багатьох null-related помилок;
- писати коротший код;
- зменшувати mutable state;
- будувати data pipelines;
- працювати з .NET libraries;
- інтегруватися з C#;
- робити type-safe domain models;
- писати property-based tests;
- будувати DSL;
- використовувати .NET tooling і runtime.
Проста аналогія: C# часто схожий на інженерний конструктор із деталями й класами. F# більше схожий на математичний опис процесу: які є дані, які можливі стани, як вони перетворюються.
Актуальна версія
Станом на травень 2026 року актуальна лінійка F# — F# 10, яка постачається з .NET 10 і Visual Studio 2026.
Microsoft Learn описує F# 10 як refinement release з покращеннями мови, FSharp.Core library і tooling, орієнтований на clarity, consistency і performance. [2]
Microsoft .NET Blog також зазначає, що F# 10 ships with .NET 10 and Visual Studio 2026. [3]
Для документації: у F#-проєктах варто вказувати версію .NET SDK і F# language version. Наприклад: .NET 10 / F# 10.
F# і .NET
F# працює на платформі .NET.
Це означає, що F# може використовувати:
- .NET runtime;
- FSharp.Core;
- NuGet packages;
- ASP.NET Core;
- Entity Framework Core;
- System.Text.Json;
- ML.NET;
- Azure SDK;
- C# libraries;
- Visual Studio tooling;
- .NET CLI;
- cross-platform deployment.
Офіційна документація F# від Microsoft пояснює, що F# використовується для написання застосунків на .NET. [4]
F# Software Foundation
F# Software Foundation — організація, яка підтримує F# community, language specification, language design process, tools, libraries і education/community outreach. [5]
Офіційний сайт F# описує мову як open source, cross-platform і free to use with professional tooling. [6]
Синтаксис F#
Простий приклад:
let hello name =
printfn $"Hello, {name}!"
hello "F#"
F# часто не потребує явного вказання типів, бо має сильний type inference.
Наприклад:
let add a b = a + b
Компілятор сам виводить типи, якщо контекст достатній.
let bindings
У F# значення оголошуються через let.
Приклад:
let name = "F#" let count = 10 let active = true
За замовчуванням bindings immutable.
Це означає, що значення не змінюється після оголошення.
Immutability
Immutability — одна з основних ідей F#.
Приклад:
let x = 10 let y = x + 5
x не змінюється. Створюється нове значення y.
Immutability допомагає:
- зменшувати кількість bugs;
- спрощувати reasoning;
- уникати випадкового shared mutable state;
- краще працювати з concurrency;
- робити код передбачуванішим.
Mutable values
F# дозволяє mutable state, але його потрібно вказувати явно.
Приклад:
let mutable counter = 0 counter <- counter + 1
Це корисно для локальних оптимізацій або interop, але в ідіоматичному F# mutable state використовують обережно.
Практична думка: F# не забороняє змінний стан. Він просто робить його помітним у коді.
Type inference
F# має потужний type inference.
Наприклад:
let square x = x * x
Компілятор може вивести тип функції.
Але для public API і складної бізнес-логіки часто корисно писати type annotations:
let calculateTotal (price: decimal) (quantity: int) : decimal =
price * decimal quantity
Type annotations служать документацією й допомагають уникати неоднозначності.
Functions
Функції — центральний елемент F#.
Приклад:
let add a b =
a + b
Функції можна передавати як значення:
let numbers = [1; 2; 3] let doubled = numbers |> List.map (fun x -> x * 2)
F# активно використовує higher-order functions.
Pipeline operator
Оператор pipeline |> передає результат зліва у функцію справа.
Приклад:
[1; 2; 3; 4] |> List.filter (fun x -> x % 2 = 0) |> List.map (fun x -> x * 10)
Pipeline робить data transformations дуже читабельними.
Чому pipeline зручний: код читається зліва направо й зверху вниз: взяли список, відфільтрували, перетворили, отримали результат.
Function composition
Композиція функцій дозволяє з’єднувати функції.
Приклад:
let trim (s: string) = s.Trim() let lower (s: string) = s.ToLowerInvariant() let normalize = trim >> lower
>> означає композицію зліва направо.
Records
Record — тип для іменованих даних.
Приклад:
type Customer =
{ Id: int
Name: string
Email: string option }
Створення record:
let customer =
{ Id = 1
Name = "Anna"
Email = Some "anna@example.com" }
Records дуже зручні для DTO, domain models, configs і data transfer.
Оновлення records
Оскільки records immutable, для зміни створюють копію з оновленим полем.
Приклад:
let updatedCustomer =
{ customer with Name = "Anna Smith" }
Це не змінює старий record, а створює новий.
Discriminated Unions
Discriminated Union або DU — тип, який описує вибір між варіантами.
Приклад:
type OrderStatus =
| Draft
| Paid
| Cancelled
DU дозволяє чітко описати допустимі стани.
Приклад із даними:
type PaymentResult =
| Success of transactionId: string
| Declined of reason: string
| Error of message: string
Discriminated unions — одна з найсильніших можливостей F#.
Pattern matching
Pattern matching дозволяє обробляти різні варіанти.
Приклад:
let statusText status =
match status with
| Draft -> "Чернетка"
| Paid -> "Оплачено"
| Cancelled -> "Скасовано"
Для DU компілятор може попередити, якщо не всі варіанти оброблені.
Option type
Option — тип для значення, яке може бути відсутнім.
Варіанти:
Some value;None.
Приклад:
let findCustomer id =
if id = 1 then Some "Anna" else None
Обробка:
match findCustomer 1 with
| Some name -> printfn $"Customer: {name}"
| None -> printfn "Customer not found"
Практична користь: замість null у доменній логіці F# часто використовує option. Це змушує явно обробити випадок відсутності значення.
Result type
Result — тип для успіху або помилки.
Приклад:
let parseAmount text =
match System.Decimal.TryParse text with
| true, value -> Ok value
| false, _ -> Error "Invalid amount"
Result корисний для:
- validation;
- parsing;
- business rules;
- API responses;
- workflows;
- railway-oriented programming.
Railway-oriented programming
Railway-oriented programming — стиль, де успішні й помилкові шляхи обробляються явно.
Ідея:
- кожен крок повертає
Result; - успіх іде далі;
- помилка зупиняє pipeline;
- помилки не ховаються в exceptions.
Цей стиль популярний у F# для бізнес-логіки та validation.
Tuples
Tuple — група значень.
Приклад:
let point = (10, 20)
let nameAndAge = ("Anna", 17)
Pattern matching:
let x, y = point
Tuples зручні для простих груп значень, але для domain models краще використовувати records.
Lists
List — immutable linked list.
Приклад:
let numbers = [1; 2; 3; 4]
Операції:
numbers |> List.filter (fun x -> x > 2) |> List.map (fun x -> x * 10)
Lists зручні для функціонального коду, але не завжди найкращі для performance-sensitive random access.
Arrays
Array — mutable fixed-size структура з індексним доступом.
Приклад:
let numbers = [| 1; 2; 3; 4 |] numbers[0]
Arrays корисні для performance, interop із .NET libraries і чисельних задач.
Sequences
Sequence або seq — lazy послідовність.
Приклад:
let numbers =
seq {
for i in 1 .. 10 do
yield i * i
}
Sequences корисні для lazy data processing.
Pattern matching із guards
Pattern matching може мати guards.
Приклад:
let discount amount =
match amount with
| x when x > 10000m -> 20
| x when x > 5000m -> 10
| _ -> 0
Guards дозволяють додати умови до pattern.
Active patterns
Active patterns дозволяють створювати власні patterns.
Вони корисні для:
- parsing;
- validation;
- domain-specific matching;
- URL routing;
- text classification;
- складної логіки matching.
Приклад ідеї:
let (|Even|Odd|) number =
if number % 2 = 0 then Even else Odd
Units of measure
Units of measure — можливість F# додавати одиниці вимірювання до чисел на рівні типів.
Приклад:
[<Measure>] type kg [<Measure>] type m let weight = 70.0<kg> let height = 1.75<m>
Це допомагає уникати помилок у наукових, інженерних і фінансових розрахунках.
Computation expressions
Computation expressions — механізм для побудови спеціальних workflows.
Приклади:
- async workflows;
- sequence expressions;
- result workflows;
- validation workflows;
- query expressions;
- custom DSL.
Відомий приклад:
async {
let! data = loadDataAsync()
return process data
}
Computation expressions — одна з найпотужніших можливостей F#.
Async workflows
F# має власний async workflow.
Приклад:
let loadData =
async {
do! Async.Sleep 1000
return "Done"
}
Запуск:
let result = Async.RunSynchronously loadData
F# також може працювати з .NET Task і C# async/await.
Tasks у F#
У сучасному .NET F# активно працює з task workflows.
Приклад:
let loadDataAsync () =
task {
do! System.Threading.Tasks.Task.Delay 1000
return "Done"
}
Task workflows зручні для interop із C#, ASP.NET Core і .NET libraries.
Type providers
Type providers — особлива можливість F#, яка дозволяє компілятору отримувати типи з зовнішніх джерел.
Наприклад:
- CSV;
- JSON;
- SQL;
- OData;
- web services;
- schemas;
- data sources.
Type providers допомагають працювати з даними type-safe способом.
FSharp.Core
FSharp.Core — основна бібліотека F#.
Вона містить:
- core types;
- option;
- result;
- async;
- list functions;
- sequence functions;
- printf;
- collections;
- computation expression support;
- базові F# constructs.
F# 10 включає покращення FSharp.Core library разом із language і tooling updates. [7]
Modules
Module — спосіб групувати функції та значення.
Приклад:
module MathHelpers =
let add a b = a + b
let square x = x * x
Modules часто використовують для pure functions, domain logic і helpers.
Classes
F# підтримує classes і object-oriented programming.
Приклад:
type CustomerService() =
member _.GetCustomerName(id: int) =
$"Customer {id}"
Classes потрібні для:
- .NET interop;
- dependency injection;
- ASP.NET Core;
- object-oriented APIs;
- C# libraries;
- framework integration.
Interfaces
F# може описувати interfaces.
Приклад:
type IReportService =
abstract member GenerateReport: reportId:int -> byte[]
Реалізація:
type PdfReportService() =
interface IReportService with
member _.GenerateReport(reportId) =
[||]
Interfaces корисні для interop із C# і .NET frameworks.
Object expressions
F# дозволяє створювати object expressions без окремого class.
Приклад:
let service =
{ new IReportService with
member _.GenerateReport(reportId) = [||] }
Це зручно для тестів, адаптерів і маленьких реалізацій.
Null у F#
F# намагається зменшити використання null.
У F# domain-коді краще використовувати:
- option;
- result;
- DU;
- records із option fields.
Але під час interop із C# і .NET libraries null може з’являтися.
Тому потрібна обережність на межах системи.
Важливо: F# допомагає уникати null у власній моделі, але не скасовує null у зовнішніх .NET API. Межі з C# потрібно обробляти явно.
Exceptions
F# підтримує exceptions, але для бізнес-помилок часто краще використовувати Result.
Exceptions доречні для:
- неочікуваних збоїв;
- infrastructure errors;
- fatal cases;
- interop із .NET APIs;
- framework-level errors.
Для validation і domain errors краще типи.
Domain modeling
F# дуже сильний у domain modeling.
Наприклад, замість string для email можна зробити окремий тип:
type EmailAddress = private EmailAddress of string
Або явно описати workflow:
type Order =
| DraftOrder of DraftData
| PaidOrder of PaidData
| CancelledOrder of CancelledData
Це дозволяє заборонити неможливі стани на рівні типів.
Illegal states unrepresentable
Популярний принцип F#:
Make illegal states unrepresentable
Українською: зробити неможливі стани такими, які неможливо описати в коді.
Наприклад, якщо замовлення не може бути одночасно Draft і Paid, краще описати це через DU, а не через набір boolean flags.
F# і C#
F# і C# працюють на .NET і можуть взаємодіяти.
Порівняння:
| Мова | Сильні сторони |
|---|---|
| F# | функціональний стиль, domain modeling, records, DU, pattern matching, data pipelines |
| C# | mainstream .NET, ASP.NET Core, enterprise tooling, велика community, OOP |
Часто хороша архітектура:
- F# для domain logic;
- C# для web/API shell;
- спільні .NET libraries;
- DTO на межах.
F# і Visual Basic
F# і Visual Basic обидві мови .NET, але мають дуже різну філософію.
Visual Basic фокусується на читабельності, legacy desktop і бізнес-застосунках.
F# фокусується на функціональному стилі, типах, domain modeling і data transformations.
F# і Haskell
F# має функціональну природу, але він практичніший і тісно інтегрований із .NET.
Порівняння:
| Мова | Особливість |
|---|---|
| F# | strict by default, .NET ecosystem, pragmatic functional-first мова |
| Haskell | pure functional, lazy by default, дуже сильна type system |
F# легше інтегрувати в Microsoft/.NET-середовище.
Haskell сильніший у pure functional research і type-level expressiveness.
F# і OCaml
F# історично споріднений із ML-family мовами, включно з OCaml.
F# схожий на OCaml у:
- pattern matching;
- algebraic data types;
- type inference;
- functional-first стилі.
Але F# орієнтований на .NET і має глибокий interop із .NET libraries.
F# і Python
Python часто обирають для scripts, data science і AI ecosystem.
F# може бути цікавим для data workflows, коли потрібні:
- static typing;
- .NET integration;
- type providers;
- correctness;
- domain modeling;
- performance через .NET;
- production-grade pipelines.
Python має більшу AI/data community.
F# має сильнішу типову модель і .NET deployment.
F# для data science
F# можна використовувати для data science.
Сценарії:
- data cleaning;
- type-safe data access;
- notebooks;
- Deedle;
- FSharp.Data;
- ML.NET;
- statistical workflows;
- finance analytics;
- data pipelines.
Офіційний сайт F# згадує data-science серед напрямів використання F#. [8]
F# notebooks
F# може використовуватися в notebooks.
Сценарії:
- exploration;
- data analysis;
- teaching;
- reports;
- прототипування;
- experiments.
Notebooks зручні, коли потрібно поєднати код, графіки й пояснення.
F# для web/backend
F# можна використовувати для backend і web.
Варіанти:
- ASP.NET Core;
- Giraffe;
- Saturn;
- Falco;
- Azure Functions;
- minimal APIs;
- type-safe domain core + C# API shell.
F# backend особливо доречний, коли багато бізнес-логіки й workflow validation.
Giraffe
Giraffe — F# web framework поверх ASP.NET Core.
Він дозволяє писати functional HTTP handlers.
Giraffe зручний для:
- functional web APIs;
- composable handlers;
- ASP.NET Core integration;
- lightweight services.
SAFE Stack
SAFE Stack — F# full-stack підхід:
- Saturn;
- Azure;
- Fable;
- Elmish.
SAFE Stack дозволяє писати web apps із F# на frontend і backend.
Це цікавий варіант для F#-команд, але не mainstream для більшості web-ринку.
Fable
Fable — compiler, який дозволяє використовувати F# для JavaScript ecosystem.
Fable корисний для:
- web frontend;
- shared code;
- functional UI;
- React integrations;
- F# у браузері.
Офіційний сайт F# згадує F# як JavaScript і .NET language для web, cloud, data-science, apps and more. [9]
Testing у F#
F# має сильну культуру тестування.
Підходи:
- unit tests;
- property-based tests;
- integration tests;
- approval/golden tests;
- type-driven testing;
- domain model tests.
Популярні інструменти:
- xUnit;
- NUnit;
- MSTest;
- Expecto;
- FsCheck;
- Unquote;
- Hedgehog.FSharp.
FsCheck
FsCheck — property-based testing library для F#.
Вона натхненна QuickCheck.
Замість одного прикладу описується властивість.
Наприклад:
let reverseReverseIsOriginal xs =
List.rev (List.rev xs) = xs
FsCheck генерує багато inputs і шукає counterexamples.
Expecto
Expecto — testing framework для F#.
Він дозволяє писати компактні тести у функціональному стилі.
Приклад ідеї:
testCase "add numbers" <| fun _ ->
Expect.equal (2 + 3) 5 "2 + 3 should be 5"
Expecto популярний у F#-спільноті.
Tooling
F# tooling включає:
- Visual Studio;
- JetBrains Rider;
- VS Code + Ionide;
- .NET CLI;
- Fantomas;
- FSharpLint;
- F# Interactive;
- NuGet;
- Paket historically;
- FAKE build scripts.
F# Interactive
F# Interactive або FSI — REPL для F#.
Він дозволяє виконувати F#-код інтерактивно.
Сценарії:
- навчання;
- прототипування;
- data exploration;
- перевірка функцій;
- scripts;
- notebooks-like workflow.
Ionide
Ionide — популярне розширення для F# у Visual Studio Code.
Воно додає:
- syntax highlighting;
- IntelliSense;
- type info;
- navigation;
- project support;
- F# Interactive integration;
- tooling для F# на різних платформах.
Fantomas
Fantomas — formatter для F#.
Він допомагає підтримувати єдиний стиль коду.
У команді краще мати автоматичне форматування в CI або pre-commit workflow.
FAKE
FAKE — F# Make, build automation system на F#.
FAKE дозволяє писати build scripts F#-кодом.
Сценарії:
- build;
- test;
- package;
- deploy;
- CI/CD tasks;
- release automation.
NuGet
F# використовує NuGet packages так само, як інші .NET-мови.
Команди:
dotnet add package FSharp.Data dotnet add package FsCheck dotnet add package Expecto
NuGet дає доступ до великої .NET ecosystem.
F# scripts
F# підтримує script files із розширенням .fsx.
Приклад:
printfn "Hello from F# script"
Scripts корисні для:
- data tasks;
- automation;
- quick experiments;
- build helpers;
- prototypes;
- notebooks-like workflows.
F# і Azure
F# можна використовувати з Azure.
Сценарії:
- Azure Functions;
- web APIs;
- data processing;
- queue workers;
- event-driven systems;
- cloud workflows;
- domain services.
Однак більшість Azure documentation прикладів частіше показує C#, тому іноді доведеться адаптувати код.
Продуктивність
F# працює на .NET, тому може мати добру продуктивність.
На performance впливають:
- allocations;
- immutable data structures;
- tail recursion;
- async/task workflows;
- boxing;
- closures;
- collections;
- interop із C#;
- compiler optimizations;
- data structure choice.
Для performance-sensitive коду треба профілювати, а не здогадуватись.
Tail recursion
Tail recursion важлива для рекурсивних функцій.
Приклад:
let sum numbers =
let rec loop acc remaining =
match remaining with
| [] -> acc
| x :: xs -> loop (acc + x) xs
loop 0 numbers
Тут recursive call є останньою операцією, що дозволяє оптимізацію.
Безпека
F# допомагає безпеці через типи, але не замінює security engineering.
Потрібно контролювати:
- input validation;
- authentication;
- authorization;
- secrets;
- dependency security;
- logging;
- SQL injection;
- deserialization;
- unsafe interop;
- null на межах із C#;
- web security;
- конфігурацію.
F# типи можуть зменшити business logic помилки, але інфраструктурна безпека лишається окремою темою.
F# у бізнесі
F# корисний у бізнесі, якщо важливі:
- складні правила;
- фінансові моделі;
- domain workflows;
- data pipelines;
- type-safe transformations;
- validation;
- event processing;
- pricing logic;
- risk calculations;
- DSL;
- correctness;
- interop із .NET.
F# часто використовують не тому, що “модно”, а тому, що він допомагає зробити складну логіку явною.
F# у фінансах
F# популярний у частині фінансової розробки.
Причини:
- strong typing;
- units of measure;
- concise modeling;
- data processing;
- математичний стиль;
- correctness;
- .NET integration;
- scripting/repl;
- DSL для financial rules.
Фінансові системи часто мають складні правила, і F# добре підходить для їх моделювання.
F# і ERP-системи
F# не є ERP-системою.
Він не веде облік, не проводить документи й не керує складом сам по собі.
У контексті K2 ERP F# може бути корисним опосередковано:
- окремий сервіс для складних бізнес-правил;
- validation engine;
- фінансові або аналітичні розрахунки;
- type-safe API client;
- ETL/data pipeline;
- DSL для правил;
- property-based testing критичних алгоритмів;
- .NET integration layer.
Але якщо основний стек K2 ERP не .NET, F# варто додавати тільки там, де його type-driven підхід справді дає користь.
F# і API K2 ERP
F# може бути клієнтом до API.
Сценарій:
- отримати JSON;
- декодувати в records;
- обробити Result/Option;
- застосувати domain rules;
- відправити результат назад через API.
F# добре підходить для typed transformations, але API boundary треба проектувати акуратно.
Коли F# особливо корисний
F# особливо корисний для:
- domain modeling;
- фінансових систем;
- data pipelines;
- validation;
- DSL;
- business workflows;
- type-safe APIs;
- property-based testing;
- .NET-проєктів із функціональним ядром;
- складної бізнес-логіки;
- аналітики;
- scripts і prototypes;
- задач, де важливо заборонити неможливі стани.
Коли F# може бути невдалим вибором
F# може бути невдалим вибором, якщо:
- команда не знає функціонального програмування;
- потрібен максимально великий ринок розробників;
- проєкт простий CRUD без складної логіки;
- вся команда стандартизована на C#;
- потрібна документація й приклади тільки в C#;
- потрібен mobile app без .NET/F# expertise;
- потрібна AI ecosystem Python;
- немає часу на навчання команди;
- функціональний стиль не дає реальної користі задачі.
Типові помилки в F#
Поширені помилки:
- писати F# як C# з іншим синтаксисом;
- зловживати mutable state;
- не використовувати records і DU;
- використовувати null замість option;
- приховувати domain errors в exceptions;
- не писати type annotations для public API;
- робити занадто складні computation expressions;
- не враховувати interop із C#;
- ігнорувати performance allocations;
- не використовувати property-based testing;
- не налаштувати formatter;
- обирати F# без плану навчання команди.
Хороші практики
Під час роботи з F# варто:
- Моделювати domain через records і discriminated unions.
- Використовувати option замість null у власному коді.
- Використовувати Result для очікуваних бізнес-помилок.
- Тримати core logic pure.
- Виносити side effects на межі системи.
- Використовувати pipeline для data transformations.
- Додавати type annotations для public functions.
- Писати property-based tests для правил.
- Форматувати код через Fantomas.
- Перевіряти interop із C# на boundaries.
- Не зловживати mutable state.
- Обирати C# interop-friendly API, якщо library будуть використовувати C#-розробники.
- Використовувати .NET SDK і F# версії послідовно.
- Документувати складні DU і workflows.
- Не робити type tricks без потреби.
Практичний висновок
F# — це сильна функціональна мова для .NET, яка особливо добре підходить для складної логіки, доменного моделювання й надійних data transformations.
Сильні сторони:
- functional-first стиль;
- type inference;
- immutability;
- records;
- discriminated unions;
- pattern matching;
- option/result;
- computation expressions;
- async/task workflows;
- type providers;
- units of measure;
- .NET interop;
- property-based testing;
- компактний код;
- хороше domain modeling.
Обмеження:
- менший ринок розробників, ніж C#;
- learning curve для FP;
- менше прикладів у mainstream .NET docs;
- C# частіше є default у .NET-командах;
- interop boundaries потрібно проектувати;
- не кожен проєкт потребує функціонального підходу.
F# найкраще використовувати там, де типи можуть суттєво зменшити ризик помилок: фінанси, бізнес-правила, validation, domain workflows, data pipelines, DSL і .NET-сервіси зі складною логікою.
Пояснення термінів
- F# — функціональна й мультипарадигмальна мова програмування для .NET.
- F Sharp — повна вимова назви F#.
- .NET — платформа Microsoft для виконання застосунків і бібліотек.
- FSharp.Core — основна бібліотека F#.
- Type inference — автоматичне виведення типів компілятором.
- Immutability — незмінність значень.
- Record — тип для іменованих даних.
- Discriminated Union — тип, що описує вибір між варіантами.
- Pattern matching — зіставлення значення з шаблонами.
- Option — тип для optional value: Some або None.
- Result — тип для успіху або помилки.
- Pipeline operator — оператор
|>для передачі результату в наступну функцію. - Function composition — поєднання функцій у нову функцію.
- Computation expression — механізм побудови custom workflows.
- Async workflow — асинхронний workflow у F#.
- Task workflow — workflow для .NET Task interop.
- Type provider — механізм отримання типів із зовнішніх джерел.
- Units of measure — одиниці вимірювання на рівні типів.
- Active pattern — custom pattern для pattern matching.
- FSI — F# Interactive.
- Ionide — F# tooling для Visual Studio Code.
- Fantomas — formatter для F#.
- FsCheck — property-based testing library для F#.
- Expecto — testing framework для F#.
- SAFE Stack — F# full-stack web approach.
- Fable — compiler для використання F# у JavaScript ecosystem.
- Railway-oriented programming — стиль обробки Result-пайплайнів.
- Domain modeling — опис бізнес-домену через типи й правила.
Дивіться також
- C Sharp
- Visual Basic
- Haskell
- Erlang
- Go
- Python
- PowerShell
- Assembly
- MATLAB
- Розробка в K2 ERP
- Тестування коду
- API K2 ERP
- Інтеграції K2 ERP
- Retrieval-Augmented Generation
- Великі мовні моделі
- GitHub Copilot
- Cursor
- Tabnine
- Штучний інтелект
- Генеративний AI
Джерела
- F# — офіційна сторінка
- F# Software Foundation
- Microsoft Learn — F# documentation
- Microsoft Learn — F# Language Reference
- Microsoft Learn — What's new in F# 10
- Microsoft .NET Blog — Introducing F# 10
- Microsoft Learn — What's new in .NET 10
- Microsoft — Learn F#
- Microsoft Learn — F# Basic Types
- F# for Fun and Profit
- Awesome F#
- Ionide
- Fantomas
- FsCheck
- Expecto
- Fable
- SAFE Stack
- MediaWiki — Help:Formatting
- MediaWiki — Help:Links
- ↑ https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/
- ↑ https://learn.microsoft.com/en-us/dotnet/fsharp/whats-new/fsharp-10
- ↑ https://devblogs.microsoft.com/dotnet/introducing-fsharp-10/
- ↑ https://learn.microsoft.com/en-us/dotnet/fsharp/
- ↑ https://foundation.fsharp.org/
- ↑ https://fsharp.org/
- ↑ https://learn.microsoft.com/en-us/dotnet/fsharp/whats-new/fsharp-10
- ↑ https://fsharp.org/
- ↑ https://fsharp.org/