@frp_ru

Страница 318 из 420
kana
12.12.2017
00:04:33
не совсем контейнер возьем m = ((->) Int)

(Int -> a) -> (a -> (Int -> b)) -> (Int -> b)

просто когда у нас такая сигнатура - это chain лучше не придумывать никакие аналогии

Maxim
12.12.2017
00:09:19
Chain из fantasy-land

Google
Maxim
12.12.2017
00:09:30
Имеют ввиду значит

kana
12.12.2017
00:10:14


да

kana
12.12.2017
00:10:36
*там 10.toString

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

Maxim
12.12.2017
00:13:39
Спасибо, так очень доходчиво )

kana
12.12.2017
00:14:11
че, действительно? Я полгода назад не понимал этой херни

тут народ крутил эти чейны и мапы над функциями и я такой "че бля"

Maxim
12.12.2017
00:15:05
Ну в процессе

kana
12.12.2017
00:15:12
и я сейчас те же "че бля" издаю, когда аппликативы над функциями применяют

λ> (\n -> (n - 1) + (\x -> x * (x - 1)) (n - 1)) 10 81 λ> (\n -> (n - 1) + (\x -> x * (x - 1)) (n - 1)) 4 9 λ> (\n -> (n - 1) + (\x -> x * (x - 1)) (n - 1)) 3 4 λ> (\n -> (n - 1) + (\x -> x * (x - 1)) (n - 1)) 2 1

/me переписал лямбду из кода выше бесточечно, но решил не постить сюда результат, ибо правила

Google
kana
12.12.2017
00:16:11
правила нужны для того, чтобы их нарушать liftA2 (+) id (liftA2 (*) id pred) . pred ((+) <*> ((*) <*> pred)) . pred

liftA2 id == <*>

> (+) <$> pred <*> (((*) <*> pred) . pred) $ 10 81

Kelin
12.12.2017
00:18:57
Ну, разница в чем

kana
12.12.2017
00:19:36
~> так обычно обозначают тип контекста (в fantasy land например)

a ~> b -> c это a.f(b) :: c a :: a b :: b f :: a ~> b -> c

Maxim
12.12.2017
00:22:48
Вот из-за него в тс юзаю классы

Приходится выражать толпой дженериков

kana
12.12.2017
00:24:10
-> - ну просто стрелка, лямбда => - указание ограничений на типы напримеер, имеем a -> a это то же самое, что и forall a. a -> a то есть функция работает для любого типа a а если мы хотим, чтобы она работала только над числами, мы ограничиваем a до Num, Num можно расматривать сейчас как множество всех типов, которые числовые Num a => a -> a а если мы хотим, чтобы функция принимала все числа, КОТОРЫЕ МОЖНО СРАВНИВАТЬ, то используем Ord, который содержит ВСЕ типы, значения которых можно сранивнивать замкнуто (Ord a, Num a) => a -> a

то есть это как мы взяли множест Ord и пересекли с множестом Num и a - это любой тип из пересечения этих множеств

(Ord a, Num a) => a -> a читается как для каждого типа a, для которого реализован инстанс класса Ord (т.е. значение типа можно сравнить с другим значением типа) И инстанс класса Num (т.е. можем складывать, вычитать, прочее) имеем сигнатуру функции, которая принимает a и отдает a

Maxim
12.12.2017
00:27:41
Чейн получается всегда бинарная функция? С тремя аргументами какая-то дичь

kana
12.12.2017
00:28:20
да, всегда бинарная. Принимает значение m a и функцию a -> m b

ну по спеке fantasy land это унарный метод

так как m a - ресивер

Maxim
12.12.2017
00:30:06
Ясно, третий аргумент позволили поставить как значение

Ну всё, пора переписать пару редьюсеров на чейн)

Maxim
12.12.2017
01:17:27
Посмотрел на тайпинги чейн Рамды в тс и флоу - ерунда всякая

Google
Maxim
12.12.2017
01:19:36
Сбивает с толку, раньше не мог понять чейн

Дмитрий
12.12.2017
01:34:08
Посмотрел на тайпинги чейн Рамды в тс и флоу - ерунда всякая
На тайпинги рамды особо смотреть смысла нет

В flow кстати в ближайшее время скорее всего будут полноценно выражаемые тайпклассы, к решению вплотную приблизился gcanti, я и ещё пара человек, у кого-то полюбому должно выйти)

Maxim
12.12.2017
01:38:40
Без поддержки массовых иде

Флоу - зомби)

Дмитрий
12.12.2017
01:38:53
С поддержкой

Maxim
12.12.2017
01:39:26
Да нет там ничего, опять на выходных парился

Дмитрий
12.12.2017
01:39:28
Я принципиально в первую очередь проверяю на выводимость типов в реальных условиях

Maxim
12.12.2017
01:40:03
А атом в винде так и не работает стабильно

Дмитрий
12.12.2017
01:40:21
Я уже даже описал все типы и тайпклассы fantasy-land Осталась последняя проблема с диким сабтайпингом дженерик-функций, мешающая Apply — остальное уже всё работает

Дмитрий
12.12.2017
01:41:56
Я там уже контрибьютор))

Я сейчас просто про полноценную реализацию тайп классов, хотя бы до уровня монадических трансформеров Идея в том, что с вычурными типами можно описывать сами констрейны, а имплементации просто должны чекнуть что они подходят под ограничения, а юзеру можно предоставлять гораздо более простые и хорошо иллюстрируемые типы

Maxim
12.12.2017
01:45:07
Я там уже контрибьютор))
Флоу тайпед или сам флоу?

Дмитрий
12.12.2017
01:45:17
Сам флоу

Maxim
12.12.2017
01:45:59
=)

Как там с guard тайпами сейчас?

И в редакторе подсветку ошибок

Вменяемую

Google
Maxim
12.12.2017
01:55:53
https://github.com/flowtype/flow-typed/blob/master/definitions/npm/redux-saga_v0.16.x/flow_v0.56.0-/test_redux-saga_0.16.x.js

Забавно, в тс я провожу тесты тс типов средствами компилятора

Тут пока похуже дела

Дмитрий
12.12.2017
01:56:53
Как там с guard тайпами сейчас?
$Refine + $Pred + %checks А как у тс дела с type refinements?)

kana
12.12.2017
01:57:33
Я там уже контрибьютор))
но тебя же нет на гитхабе в контрибьютерах

вечно кажется, что флоу напичкан кучей костылей типа все эти $-типы

Дмитрий
12.12.2017
01:58:14
но тебя же нет на гитхабе в контрибьютерах
Лычка есть, коммиты есть, ниче не знаю)

kana
12.12.2017
01:58:18
с детства недовение ко всему, где есть $

Admin
ERROR: S client not available

Дмитрий
12.12.2017
01:59:34
Ну сначала это предполагалось как внутренние типы, потом решили что семантика вполне очевидная и можно оставлять их в таком виде, заодно не загрязняя неймспейс юзера

Тут пока похуже дела
В отличии от тайпскрипта, здесь сто лет как доступен AST всем желающим

Вместе с json выводом компилятора

Maxim
12.12.2017
02:02:45
$Refine + $Pred + %checks А как у тс дела с type refinements?)
Никак. Тс - массовый стандарт для быдлокодеров, зачем нам такие заморочки)

Дмитрий
12.12.2017
02:04:35
Это не заморочки, лол https://flow.org/en/docs/lang/refinements/ Если это для тебя сложно то я даже не знаю)

Maxim
12.12.2017
02:05:12
С - сарказм

Дмитрий
12.12.2017
02:06:10
Просто это наоборот форсит использование простейших языковых конструкций вместо заморочек с типами и кастов через any

Maxim
12.12.2017
02:06:15
Тайпгарды, намного веселее рефайнментов

Alice
12.12.2017
02:07:40
Без поддержки массовых иде
Флоу поддерживается любыми иде, поддерживающими эслинт же. У меня лично даже в идее отключены инспекции, связанные с флоу, оставлен только эслинт + еслинт-плюгин-флоутайп-еррорс.

Maxim
12.12.2017
02:07:52
Рефайнмент как по ссылке у тебя, есть с нулевых версий тс

Google
Дмитрий
12.12.2017
02:10:30
вечно кажется, что флоу напичкан кучей костылей типа все эти $-типы
На самом деле жаль до этого раньше не додумались Это то, как вводят в язык тайплевел конструкции Нативный, бесконечный $Compose, который физически невозможно написать самому, $Call, предоставляющий результаты вызова функции с произвольным набором аргументов, $TupleMap который на тайплевеле применяет функцию к таплу произвольной длины и содержания, короч это реально нормальная идея, в текущих условиях ты ни одну из вышеперечисленных функций не выразишь в типе самостоятельно

Таких Кастов на самом деле не много, ну пока рамду не заюзаешь)
Потому что в тс они не работают, поэтому и немного)

Дмитрий
12.12.2017
02:11:45
kana
12.12.2017
02:12:18
тоже испытывал, ни о каком языком сервере речи не было, он запускал flow по сейфу (автоматическому) и даже на мощном компе все постоянно подвисало

Дмитрий
12.12.2017
02:12:50
У меня в данный момент на ноуте открыто 4 проекта с четырьмя серверами флоу

В одном из них, для понимания масштаба, более трёх тысяч ошибок

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

Maxim
12.12.2017
02:15:44
Это обманчивое впечатление
Было бы интересно получить пример

В каких случаях тс не вывезет рефайнмент юнион типа

Дмитрий
12.12.2017
02:22:27
В каких случаях тс не вывезет рефайнмент юнион типа
https://github.com/zerobias/telegram-mtproto/blob/5431bb85acc901cac00cfd6a83ac65283c0c9a18/packages/telegram-mtproto/src/state/query/resolve-request.js#L64

Вся страница целиком, в каждой точке, выводится на основании единственного типа в самом низу страницы

Выводится причём для обеих веток, так как это Either<A, B>, и в конце я получаю доказательство того что все кейсы учтены,, так как я последовательно урезал B тип до полного empty

То есть в первую очередь это об удобстве разработки речь, мне просто нужно писать заметно меньше чтобы получить гораздо больше

Maxim
12.12.2017
02:26:49
Хм, а если chain. Будет вызываться в другом месте?

С другим типом, совпадающим по ключам

Дмитрий
12.12.2017
02:27:42
Не принципиально, более того, этот файл используется по всему проекту и в хвост и в гриву

С другим типом, совпадающим по ключам
Что значит совпадающим по ключам?))

Флоу различает номинальную и структурную типизацию и умеет работать с обеими, этот тип ни с чем не пересечется

Maxim
12.12.2017
02:29:41
Не правильно вопрос задал

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