@frp_ru

Страница 57 из 420
Дмитрий
04.05.2017
11:00:31
Aleh
04.05.2017
11:00:50
Обоснуй
любое "складываемое"

Дмитрий
04.05.2017
11:01:18
Опа, уже обобщения пошли)

Aleh
04.05.2017
11:01:37
Google
Дмитрий
04.05.2017
11:02:10
Ты сложил два числа и получил результат a?

Aleh
04.05.2017
11:02:28
вместо a ты подставляешь тип, если это простые int, то получил int

если это float, то float

если complex, то complex

все зависит от природы чисел

Дмитрий
04.05.2017
11:03:10
Иррациональные забыл

Я говорю про конкретные 2 и 3

Забудь про свои классы, я о другом)

Дмитрий
04.05.2017
11:03:41
Ты можешь говорить, что результат будет числом, потому что система типов статически тебе вывела это

Aleh
04.05.2017
11:03:52
да, окей

хотя "статически вывела" что значит?

Дмитрий
04.05.2017
11:04:20
Compile time

Google
Aleh
04.05.2017
11:04:32
окей, а система типов это компилятор?

Дмитрий
04.05.2017
11:04:42
Это математическое понятие

Aleh
04.05.2017
11:05:24
как это математическое понятие живет в compile time?

короч ты про то, что я знаю, что там числа, потому что знаю типы входа и выхода операции?

Дмитрий
04.05.2017
11:06:11
Оно в спеке языка живёт)

Aleh
04.05.2017
11:06:42
Оно в спеке языка живёт)
мы про какой язык кстати?

Дмитрий
04.05.2017
11:06:59
Любой

andretshurotshka?❄️кде
04.05.2017
11:06:59
лол

Дмитрий
04.05.2017
11:07:16
Кроме клингонского, тот живёт в сенарии

Aleh
04.05.2017
11:08:00
Любой
function f(a, b) { return a+b; } что скажет тебе спека языка про типы в compile-time?

Дмитрий
04.05.2017
11:08:28
То что жс — динамически компилируемый

Если ты имеешь статическую систему типов, то можешь доказывать какие-то утверждения о своих объектах.

Aleh
04.05.2017
11:08:44
а про типы?)

окей, что значит "доказывать утверждения о своих объектах"?

что такое "статическая система типов" знаю немного, вроде)

хотя вон в хаскеле есть динамическая, она тож ничешная, вчера перевод скидывал, литературный такой

Дмитрий
04.05.2017
11:12:43
В хаскелле перед этим идёт статическая система, про которую я сейчас и говорю)

Aleh
04.05.2017
11:12:54
не, она как раз после идет)

типа система типов в хаскеле это такой динамический язык, я слабо шарю, но задача о ферзях прикольно решается)

Дмитрий
04.05.2017
11:15:09
У всех объектов есть единый интерфейс для взаимодействия. Любые два числа сложатся функцией a -> a -> a, любые два других типа — тоже, причём это будет выводиться для любых твоих объектов так же, как и в примере с числами до этого

Google
Дмитрий
04.05.2017
11:15:12
Если у тебя есть объект, то ты знаешь, что его .map вернёт именно его же

Aleh
04.05.2017
11:16:54
не у всех объектов есть map

или ты про fmap функторов?

Дмитрий
04.05.2017
11:18:06
не у всех объектов есть map
Да, это категория Functor

Aleh
04.05.2017
11:18:18
ага, окей

Дмитрий
04.05.2017
11:19:03
У числа есть .map, и n.map( a -> a) даст тебе число при любом исходе, без исключений, потому что это выводится из самого подхода

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

Aleh
04.05.2017
11:19:29
"чем обычно" - это как?

У числа есть .map, и n.map( a -> a) даст тебе число при любом исходе, без исключений, потому что это выводится из самого подхода
имея функтор f, операция f.map(a -> b) даст мне в результате функтор f b, а не f a. И это тоже вполне безопасно, без исключений, выводится из самого подхода и т.д.

Дмитрий
04.05.2017
11:26:01
В общем, у тебя есть единый интерфейс для взаимодействия, числа будут возвращать тебе числа, промисы - промисы, есть единый интерфейс для применения трансформаций к объекту, опять же, к любому объекту с той же уверенностью, с какой мы выводим, что сумма двух чисел даст нам число

Aleh
04.05.2017
11:26:43
очевидно f a и f b это разные типы, но если хочется совсем разного, то можно опять же взять a -> f a

Дмитрий
04.05.2017
11:27:17
Вот

Aleh
04.05.2017
11:27:40
или да боже, apply :: (a -> b) -> a -> b

Дмитрий
04.05.2017
11:27:41
Так же очевидно, что а -> a вернёт один тип

Aleh
04.05.2017
11:28:04
а a -> b вернет любой

и?)

Дмитрий
04.05.2017
11:28:12
Не любой, а любой тот же

Google
Дмитрий
04.05.2017
11:28:17
Гарантированно

Aleh
04.05.2017
11:28:23
Дмитрий
04.05.2017
11:28:33
Если у тебя такие правила применяются повсеместно, без исключений , то неоткуда взяться исключениям из правил

Считай это дженериком

Aleh
04.05.2017
11:28:46
я знаю, что это такое)

Дмитрий
04.05.2017
11:30:07
Ну ты на какую то свою линию отклоняешься вечно) Я не говорю тебе про функцию a -> b

А тупо про function<a>(_a: a): a

Только если в жс мы в основном можем на это надеяться, то когда у тебя вся система типов сложена только из таких обобщенных конструкций, это гарантируется

Aleh
04.05.2017
11:31:41
ты для красного словца сказал, что гарантируется типобезопасность?

Дмитрий
04.05.2017
11:31:54
Мы можем сделать tree обобщённо так же как array и у него изначально будет тот же способ для взаимодействия с ним

Aleh
04.05.2017
11:32:26
я говорю, что a -> a и a -> b одинаково типобезопасны

Дмитрий
04.05.2017
11:32:49
Да

Aleh
04.05.2017
11:33:06
и не понимаю, зачем и как к функции a -> a приплетается типобезопасность

Дмитрий
04.05.2017
11:33:15
Но вне контекста a -> b не значит ничего, мы берём что-то и возвращаем что-то ещё

Aleh
04.05.2017
11:33:17
она приплетается к любой функции, которая типизируется

Но вне контекста a -> b не значит ничего, мы берём что-то и возвращаем что-то ещё
а нам конкретнее надо будет, только с конкретными операциями

хотим конкретнее - описываем конкретнее

Дмитрий
04.05.2017
11:34:31
Неет

Google
Дмитрий
04.05.2017
11:34:35
В этом вся фишка

У тебя это утверждение выполняется в любом случае

Aleh
04.05.2017
11:34:52
нет

Дмитрий
04.05.2017
11:35:14
Ну это у тебя нет, у меня нет, ты спросил - я отвечаю, почему))

У тебя есть единый интерфейс чтобы применить любую функцию a -> a к любому объекту

Aleh
04.05.2017
11:35:43
взять тот же compose: compose :: (a -> b) -> (b -> c) -> (a -> c)

нам абсолютно пофигу что принимают функции

важна связь типов

Дмитрий
04.05.2017
11:36:09
Забудь про них, попробую сразу дальше объяснить)

У тебя есть единый интерфейс чтобы применить любую функцию a -> a к любому объекту

Попробуй это представить

Просто теоретически, что будет если это правда

Aleh
04.05.2017
11:36:31
думаю справлюсь)

Yumi
04.05.2017
11:36:49
А разве нет конкретно определения у функций, которые принимаю значение и возвращают значение одного типа?

Дмитрий
04.05.2017
11:36:50
К промису и к комплексному числу - один и тот же способ

Aleh
04.05.2017
11:37:07
один и тот же способ чего?)

Дмитрий
04.05.2017
11:37:28
Применить любую функцию типа a -> a к объекту

Aleh
04.05.2017
11:37:58
есть языки где нет единого способа применить функцию к объекту?

в том числе и a -> a?

Страница 57 из 420