TGViewer
Лаборатория Математики и Программирования Сергея Бобровского Лаборатория Математики и Программирования Сергея Бобровского @lambda_brain · 1.41K subscribers
Post #2025 845
1. Параметрический полиморфизм -- это база универсальности.

2. ad-hoc полиморфизм -- это зависимые типы.

Программист работает с интерфейсами или перегрузкой функций (трейты, тайпклассы...). Функция
sum : Num a => [a] -> a
ведет себя по-разному для Int, Float и т.д.

К сожалению, на F# так компактно как в хаске записать подобную сигнатуру невозможно :(
Нужен when constraint с ^T, +, Zero...

Ладно, вот вам жава, для наглядности )

public int sum(List<Integer> list)
public double sum(List<Double> list)


Так вот, это по сути работа с зависимыми типами. Ограничение Num a (Integer list, Double list) -- это не просто помощь компилятору/тайпчекеру, а дополнительный аргумент, который функция sum неявно принимает. Этот аргумент -- доказательство того, что для типа a существует реализация интерфейса Num.

Тип Num a -- это тип-пропозиция, которая может быть либо доказана (и тогда мы получаем конкретную реализацию), либо нет. Таким образом, выбор реализации -- это просто применение функции к нужному "пруфу".

На практике имеем гарантии на этапе компиляции, явные контракты (сигнатура функции явно говорит о требованиях), и нужное нам для рефакторинга безопасное расширение функциональности. Не совсем завтипчики, но дух уже чувствуется )

type Money = { Amount: decimal; Currency: string }

// пруф 1: сложение только одинаковых валют
let sameCurrencyAdd a b = ...

// пруф 2: сложение с конвертацией по курсу
let convertAndAdd (exchangeRate: string -> string -> decimal) a b = ...

let money1 = { Amount = 100m; Currency = "USD" }
let money2 = { Amount = 500m; Currency = "RUB" }

sum convertAndAdd ... [money1; money2] - сконвертирует и сложит
sum sameCurrencyAdd ... [money1; money2] - ошибка компиляции


Кто проходил мой курс по F#, попробуйте дописать до полноценного примера.
  • ❤ 37
  • ✍ 13
  • 👍 2
More from @lambda_brain
  1. Oct 1, 2026Ребята спрашивают, ну ок, моё скромное мнение. у вас где-нибудь можно прочитать ваше мнени…
  2. Sep 30, 2026Ладно, вот вам база, почему так трудно переучиваться с императивного/объектного стиля коди…
  3. Sep 30, 2026Ну, с Днём Рунета! Многие годы Рунет был эталонным примером свободы, а сегодня превратился…
  4. Sep 28, 2026. Облако драгоценностей за неделю. Дипломный проект разросся уже так, что расширил его до…
  5. Sep 27, 2026GELU (Gaussian Error Linear Unit) -- базовая фича архитектуры трансформеров, да и вообще в…
  6. Sep 27, 2026Продолжение сериала "Совершенно не удивлён, и дальше будет только хуже" (с) На этой неделе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →