
Дмитрий
11.07.2017
22:34:50
Синтаксис такой будет
что бы это ни значило

Denis
11.07.2017
22:35:14
и все равно я Algebra без этого гемороя не напишу HKT

Дмитрий
11.07.2017
22:36:52
Ну да

Google

Denis
11.07.2017
22:37:27
вот когда hkt появится вот тогда и поговорим :D а так это два поделия

Дмитрий
11.07.2017
22:38:05
link?
https://github.com/facebook/flow/releases/tag/v0.49.0
Added support for parsing opaque types. Type system support coming soon.
В 50 версии на гитхабе вроде уже вообще должно работать)

Denis
11.07.2017
22:42:35

andretshurotshka?❄️кде
12.07.2017
05:59:36
спамеры

Aleh
12.07.2017
06:53:25

Denis
12.07.2017
09:18:17
https://github.com/gpujs/gpu.js

Дмитрий
12.07.2017
10:06:27
А что это Оо
Хороший вопрос ?
Я увидел в релизе загадочный анонс opaque types, пошерстил в репе и нашёл, как они будут выглядеть; это — пример из валидного теста. Предназначение могу только предполагать)

Lulz
12.07.2017
10:06:59

Сергей
12.07.2017
10:07:31

Aleh
12.07.2017
10:08:58
https://en.wikipedia.org/wiki/Opaque_data_type

Google

Дмитрий
12.07.2017
10:09:27
Да, эту статью я в первую очередь открыл)

Aleh
12.07.2017
10:09:43
как это связано с этим синтаксисом неясно от слова совсем

Дмитрий
12.07.2017
10:12:17
Вот да)

? animufag ?
12.07.2017
10:13:51
а ссылку можно на что-нибудь? на пул реквест или то где ты достал ту строку
не гуглится никак

Дмитрий
12.07.2017
10:14:15
какие преположения?
Новый тип на основе старого, например. Видишь как бы контейнер меняется, как monad transformer

Aleh
12.07.2017
10:14:17

Дмитрий
12.07.2017
10:14:35
Ща сам файл скину
Интригует, что это далеко не всё, что добавили в теччении всего одного релиза
https://github.com/facebook/flow/blob/master/src/parser/test/flow/types/opaque_aliases/valid/opaque_subtype.js

Aleh
12.07.2017
10:21:26
хыхы https://github.com/gcanti/recursion-schemes-ts

Denis
12.07.2017
10:22:16
до пизды
на анаморфизме js дохнет
потому что лени нет

? animufag ?
12.07.2017
10:23:20
крч это как алиасы. declare opaque type FBID = number;
видимо предназначены для экспорта
хотя хз в счём разница тогда с алиасами - зачем новое слово

Дмитрий
12.07.2017
10:23:45
Интригует, что это далеко не всё, что добавили в теччении всего одного релиза
А именно — добавили $ElementType — mapped types
const obj = {
number: 1,
string: "test"
}
function getValue<Key: string>(key: Key): $ElementType<typeof obj, Key> {
return obj[key];
}
const x: number = getValue('number')
const y: string = getValue('string')
// errors below
// const a: string = getValue('number')
// const b: number = getValue('string')
И, та даам, $Values — видимо решили проблему с $ObjMap
Старые типы были всегда структурно равны

? animufag ?
12.07.2017
10:26:22
хмм. opaque... непрозрачны...

Google

? animufag ?
12.07.2017
10:26:40
ну ладно ок
крутая штука

Aleh
12.07.2017
10:27:17
а как для них конструктор объявить?
const a: Num = ???

? animufag ?
12.07.2017
10:29:03
наверное вывод будет
ну или тип они только в одну сторону приводятся

Aleh
12.07.2017
10:29:45
ладно, оставим гадания на кофейной гуще

Сергей
12.07.2017
10:29:52

? animufag ?
12.07.2017
10:29:55
функция с Num аргументом принимает number но не наоборот

andretshurotshka?❄️кде
12.07.2017
10:32:30
или tagged

Дмитрий
12.07.2017
10:32:57
ХЗ

andretshurotshka?❄️кде
12.07.2017
10:33:33
)

Дмитрий
12.07.2017
10:36:41
Я только вижу, что в примере мы как-то поменяли контейнер, сохранив дженерик) Если это так, то на этом можно строить HKT и прочее

? animufag ?
12.07.2017
10:37:39
да ну
в котлине вон тоже тайпалиасы с дженериками
никак не помогает НКТ

Дмитрий
12.07.2017
10:40:51
Я просто давно экспериментировал с этим вслед за gcanti, вижу тут несколько новых идей для реализации ?

Denis
12.07.2017
10:53:52
он или я его мысли вчера прочиатли)) https://github.com/gcanti/recursion-schemes-ts/blob/master/src/index.ts#L5

Google

Дмитрий
12.07.2017
11:01:15
не сделать норм HKT ни в flow, ts...
У них абсолютно разные подходы, не надо обобщать)
В flow нормальный вывод типов, проблема в отдельных косяках технического плана.
Например existential type — мощная фича для механизма вывода типов. Но на другом уровне закостылили понятие файла и поэтому * работает только при объявлении и выводе в одном файле

Denis
12.07.2017
11:11:47
https://github.com/gcanti/recursion-schemes-ts/issues/1
надо обобщать для изоморфизма любого, а не для A -> Fix, Fix -> A

andretshurotshka?❄️кде
12.07.2017
11:19:27
клингонский ?

Denis
12.07.2017
11:20:02
алгебра должна быть не завязана на одном Fix
нужны только embed, project а все эти cata,ana,para и прочие просто выводятся через них

Vadim
12.07.2017
12:39:48
Читаю сейчас обсуждения насчет sanctuary, и ее сравнения с ramda. Он том насколько она более соответствует строгости следования fandasy-land и вообще работе с типами, по сравнению с ramda. И думаю, почему такие местные продвинутые люди как @xgrommx до сих-пор не перешли еще на sanctuary? )

Denis
12.07.2017
12:43:28

Admin
ERROR: S client not available

Vadim
12.07.2017
12:44:10
В смысле, для тебя преимущества sanctuary не очевидны?
Строгость не нужна?

Denis
12.07.2017
12:44:25
какие? что это медленно?
у меня haskell и purescript есть для строгости

Vadim
12.07.2017
12:45:13
Я ее сам еще не использовал. Но судя по обсуждениям, я так понял, что медленность у нее начинается только если включены рантайм проверки

Denis
12.07.2017
12:45:25
еще в sanctuary filterM не правильный

Vadim
12.07.2017
12:46:51

Denis
12.07.2017
12:49:13
ох блин
я понял как сделать мутуморфизм
mutu :: Recursive t => (Base t (a, a) -> a) -> (Base t (a, a) -> a) -> t -> a
mutu = go where go f g = g . fmap (go g f &&& go f g) . project
evenOdd :: Nat -> Bool
evenOdd = mutu f g where
f ZeroF = False
f (SuccF (b, _)) = b
g ZeroF = True
g (SuccF(b, _)) = b

Google

Denis
12.07.2017
12:50:36
прелесть мутуморфизма вроде в том, что callstack элиминируется
а как вам такая рыба?))
infixr 9 <><
f <>< g = f . project . g
кто скажет зачем это?)

? animufag ?
12.07.2017
12:58:29
:t project

Denis
12.07.2017
12:59:07
ну почти тоже что и Fix
project :: Recursive t => t -> Base t t

? animufag ?
12.07.2017
13:01:34
Не, сдаюсь
Рекурсив, бейс

Denis
12.07.2017
13:04:01
это позволяет делать композиции для алгебр, потом просто скормить эту композицию в cata и это будет одна проходка для катаморфизма
(cata $ map'' (* 10) <>< map'' (* 100) <>< filter'' even) [1 .. 10]
бля
параморфизм через хистоморфизм
myPara :: (Corecursive t, Recursive t) => (Base t (t, a) -> a) -> t -> a
myPara psi = snd . histo (embed . fmap (fst . extract) &&& psi . fmap extract)

Дмитрий
12.07.2017
15:19:52

andretshurotshka?❄️кде
12.07.2017
15:22:07

Сергей
12.07.2017
15:22:23

Denis
12.07.2017
15:22:58
это из стрелок, можно взять более категориальное например бифунктор
это значит \t -> (f t, g t)
f &&& g
cata проще через histo
cata' :: Recursive t => (Base t a -> a) -> t -> a
cata' f = histo (f . fmap extract)