
Nikita
27.08.2017
09:55:14

? animufag ?
27.08.2017
10:10:10

.
27.08.2017
10:12:38

Google

? animufag ?
27.08.2017
10:14:14
ну ты ведь про банальное T1: T2 спрашиваешь? а то слово ковариантен обычно в контексте отображений всплывает

.
27.08.2017
10:15:15
Я спрашиваю в контексте Т2 является подмножеством Т1. Например унаследован от него.

? animufag ?
27.08.2017
10:18:58
ну дада. это почти в любых дженериках есть
function f<T, T2: T> (t: T2): T {

.
27.08.2017
10:19:47
Где почитать можно про реализации? Если не сложно

? animufag ?
27.08.2017
10:19:49
просто проверил. как загуглить не знаю
алсо он кажись не может прочить следующие типы так что <T2: T, T> не выйдет

.
27.08.2017
10:20:30
Хм
Подождите
Так не будет же работать это просто проверка на принадлежность типа Т2 к типу Т1 а не ковариантность. Т.е. если тип два унаследован от потомка Т1 то не заведется.
И в интерфейсе по идее не будет работать, к сожалению я с телефона, возможности проверить нет.

? animufag ?
27.08.2017
10:23:19
> Т.е. если тип два унаследован от потомка Т1 то не заведется
так вот что такое ковариантность?

.
27.08.2017
10:23:52
Сейчас попробую найти точное определение

Google

.
27.08.2017
10:27:35
https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B8_%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
есть ещё ссылка на статью Atlassian по scala но это оффтоп уже будет

? animufag ?
27.08.2017
10:30:08
ну дада. у тебя есть какой то контейнер?
опиши на скале/хаскеле

.
27.08.2017
10:31:01
Можно сделать. У меня есть цель разобраться как это вообще делают в js лучшие практики.

? animufag ?
27.08.2017
10:31:18
нужный тип
хотя в хаскеле нет наследования и наверное не оче корректно

.
27.08.2017
10:35:07
идея в том, что у меня будет некий поток событий прилетать хотелось бы базируясь на типах описать механику. Это петпроджект. Вообще возможно, я задаю странные вопросы.

? animufag ?
27.08.2017
10:35:36
https://flow.org/blog/2016/10/04/Property-Variance/
вообще думал это импосибл описывать ко-контрвариативность контейнеров из-за мутабельности джс. но видимо ок

.
27.08.2017
10:36:36
Спасибо!
да как раз нормально. Просто можно взять некий диапазон мутаций и его описать как деваинт типа. А всё, что не проходит в трэш кидать. Получается просто дрэйн потока.
ещё раз спасибо за ссылку, пойду читать

andretshurotshka?❄️кде
27.08.2017
10:55:55
В флоу можно
Из-за этого они пилят костыли, как ковариантность в коллбэках и промисах

Nikita
27.08.2017
11:26:54

andretshurotshka?❄️кде
27.08.2017
11:31:24
да вроде все гуглится

Vadim
28.08.2017
05:26:12
Я сейчас уже прихожу к не очень приятному выводу насчет строгой типизации в js при использовании функционального подхода. Я не знаю как насчет flow (я им не пользовался), но тайпскрипт теряет огромную часть своей полезности, если ты активно используешь либы, типа ramda.
И в итоге, если эта типизация мало что гарантирует, но отнимает время (например на прописывание всяких порой сложных дженериков, а так же поддержание актуальности тайпингов сторонних либ, которые при обновлении тоже доставляют хлопот), то не лучше ли сконцентрироваться на тестах, и отказаться от строгой типизации вообще?

Google

.
28.08.2017
05:29:12

Vadim
28.08.2017
05:30:56
Ну например компилятор ts самостоятельно не может контролировать что у вас вернет какой-нибудь, например, R.applySpec.

.
28.08.2017
05:32:50
Подождите, но ведь если вы используете это в рамках некой функции обёртки, всёравно придётся указывать возвращаемый тип.


Vadim
28.08.2017
05:35:23
Если не использовать ramda, то компилятор сам видит что у тебя происходит внутри функции. И если он видит что реализация вернет не тот тип, который ты указал в виде возвращаемого, то ругнется. В случае же с рамдой он не видит как происходит реализация, и полностью доверяется тому что ты ему говоришь (в виде дженериков)
И в итоге, если ты в теле условного applySpec что-то изменил, то ты внимательно должен соответственно изменить и дженерик. Так как сам компилятор о реализации ничего не знает, и на ошибку не ругнется. Короче ты теряешь контроль компилятора. А раз так, то стоит ли тратить время на все эти прописывания типов, которые контролируешь только ты?
Не проще ли переложить все на тесты?
ts ОЧЕНЬ полезная штука, но не при функциональном подходе
Да еще и все эти обращения через path или линзы. Ну вот как это может контролировать компилятор?

Denis
28.08.2017
05:52:06

Vadim
28.08.2017
05:53:13
Ты считаешь что функциональный подход в js не несет пользы?

Nikita
28.08.2017
06:20:22


Vadim
28.08.2017
06:23:06
>> Можно писать обертки и явно указывать тип. Решение не идеальное, но все же.
Если выбирать между этим решением и написанием тестов, то уж лучше тесты. Ибо данное решение вообще ничего особо не дает. Особенно если ты активно используешь либы типа ramda или lodash-fp
>> Либо вообще отказаться от использования типо-небезопасных функций.
все функциональные js-либы типо-небезопасны, к сожалению.

Андрей
28.08.2017
09:28:00
Не проще ли переложить все на тесты?
можно использовать подход эквивалентный clojure.spec - описывать типы динамически и проверять их потом проперти тестами - как плюс можно помимо банальной типизации проверять очень сложные инварианты которые в flow/ts не выразимы. ну и динамические валидаторы нам всеравно нужны для внешних данных.
для жса есть tcomb-generate, runtypes-generate ну и сам jsverify

.
28.08.2017
09:29:14
Но ведь при этом будет сильный штраф на производительность.

Denis
28.08.2017
09:29:16
Или писать на пурсе или хаскель

Андрей
28.08.2017
09:29:32
ну в проде вырезать проверки легко
этоже только для девелопа и теста
ну пурса и хаскель не имеют из коробки refinement/dependant типов(в 8 знаю что чтото появилось) и там тоже надо иногда использовать динамические доказательства

Denis
28.08.2017
09:34:29

.
28.08.2017
09:36:26
Ну оно и понятно. ТС и флоу это же больше инженерные\прикладные вещи. Т.е. баланс между эффективностью и простотой в пользу простоты. Если сделать сиситему типов и механику аналогичную Haskell то просто никто не будут использовать ни ТС ни флоу.

Google

Андрей
28.08.2017
09:38:37
да конечно лучше
я говорил к тому что не стоит зацикливатся только на статических доказательствах - надо уметь пользоватся и всем арсеналом динамических.
в идеале бы конечно еще чтобы языки помогали использовать и то и то и переходит с одного на другое более менее бесшовно

Denis
28.08.2017
09:40:28
Динамических языков не существует как мат модель

Aleh
28.08.2017
09:41:25
И полных непротиворечивых формальных систем, это ж не повод ничего не делать)

Nikita
28.08.2017
09:43:01

Denis
28.08.2017
09:43:10
Запилил брейнфак на свободных монадках)))

Nikita
28.08.2017
09:43:42

.
28.08.2017
09:44:03

Nikita
28.08.2017
09:44:27

.
28.08.2017
09:45:28
Думаешь, это из-за системы типов ?)))
Не только из-за неё. В целом из-за концепции языка. Чтобы начать писать вменяемый код необходимо очень много прочитать не относящегося непосредственно к scala. Я по себе сужу (нормальный код пока не могу писать)

Admin
ERROR: S client not available

Андрей
28.08.2017
09:45:50

Denis
28.08.2017
09:45:57
Человек ленивая сволочь, и берет то, что дешевле или проще, даже если это вредно и не полезно

Nikita
28.08.2017
09:46:20

.
28.08.2017
09:46:59

Nikita
28.08.2017
09:47:25
Да, это вполне логично)

Aleh
28.08.2017
09:47:53

.
28.08.2017
09:48:03

Андрей
28.08.2017
09:48:17
лабать в динамике !== не задумываться вообще

.
28.08.2017
09:48:57

Denis
28.08.2017
09:49:21
Кстати брейнфак это что-то типа ленты Тьюринга

Google

Nikita
28.08.2017
09:49:45
А потом уже постепенно приходило понимание

Андрей
28.08.2017
09:52:03
тех кто не задумывается действительность постепенно заставит задумыватся
я думаю многие кто сегодня пишут на тс еще пару лет назад вообще не думали ни о какой типизации в вебе
то что динамическая типизация не исчезнет это да - исчезнут те кто не умеет пользоватся динамическими доказательствами(писать тесты и проперти тесты)

Denis
28.08.2017
09:53:38
Писать тесты это уже хуйня, когда за это должен вывести доказательство через типы компилятор

.
28.08.2017
10:06:28
Просто средний градус по сообществу такой, что типизацией и не пахнет. Т.е. если сравнить число публикуемого кода с использованием типов и без, то динамика не очень обнадёживающая. Сравнение не вполне корректное, но всё же
https://trends.google.ru/trends/explore?q=typescript%20react,flow%20react,javascript%20react
вот так корректнее

Aleh
28.08.2017
10:13:15
и может ли он вообще так делать?

Ilya
28.08.2017
11:28:07
Надо популяризировать типы как-то.
Аппелировать к хип-молодежи типо меня что это здорово, круто, и если смузи пьешь то хотя бы флоу должен использовать.
А там мб сядут за нормальные языки.

Aleh
28.08.2017
11:29:54

Ilya
28.08.2017
11:30:06
Ну Флоу это уже не без типов.
Лучше с флоу чем без флоу.

Aleh
28.08.2017
11:30:18
ну я про “нормальные языки"

Ilya
28.08.2017
11:30:35
Нормальные языки это Джава там.
Кресты.
Шарп.

Aleh
28.08.2017
11:30:46
эу
ща выдохну