Sergey
это операции над типами также в haskell, ocaml, flowtype, typescript, ……. reason можно проводить такие операции над типами
andrei
там же тоже tagged union
andrei
data Maybe a = Just a | Nothing
Cat
насколько я понимаю, речь об этом
Yuriy
Можно брать #[derive(A, B)] pub trait C {} Надо будет макрос писать или pub trait C<T: A + B> {}
Cat
> pub trait C<T: A + B> {} да, тоже рабочий вариант
Sergey
рили. спасибо
Yuriy
О_о
Могу объяснить как писать макросы под #[derive()] Там есть ещё пару проблем с Drop’ом и PhantomData’ой.
Sergey
Могу объяснить как писать макросы под #[derive()] Там есть ещё пару проблем с Drop’ом и PhantomData’ой.
если есть статья на эту тему, буду очень благодарен не только я
Sergey
да, я вспомнил
Sergey
хотелось бы простое, типа: fn foo(input: Foo | Bar) {} 😄
Sergey
без лишних энамок
Yuriy
Стандартный пример use std::marker; struct Iter<'a, T: 'a> { ptr: *const T, end: *const T, _marker: marker::PhantomData<&'a T>, } Если без PhantomData, то не будет вызван Drop
Αλεχ
хотелось бы простое, типа: fn foo(input: Foo | Bar) {} 😄
и часто ты хочешь РАЗНЫЕ энамы в разных функциях?
Sergey
хороший вопрос match input { Foo => Bar => } мб
Αλεχ
хороший вопрос match input { Foo => Bar => } мб
если у тебя есть две функции
Sergey
и часто ты хочешь РАЗНЫЕ энамы в разных функциях?
Foo и Bar это могли быть впринципе любые типы
Αλεχ
Foo | Bar они один энум принимают?
Yuriy
из-за указателей?
Не, там есть проверка принадлежности типа контейнеру, сейчас сделано через PhantomData, в будущем будут пилить что бы было неявно. Там просто runtime код ещё emit’ится для RefCell’a, по этому такие костыли.
Sergey
вроде того
Αλεχ
Sergey
👎😕
на счет реализации мне пока сложно рассуждать
Sergey
хоть в энам под капотом заворачивать
Αλεχ
на счет реализации мне пока сложно рассуждать
да мне и с точки зрения использования кажется что это плохо
Αλεχ
раст вообще не любит неявностей
Αλεχ
зачем тебе генерить этот энам, если скорее всего он нужен не в 1 месте, а по крайней мере в 4-5?
Sergey
просто видел и писал, энамки тупо для этого
Sergey
нууу
Αλεχ
для двух одинаковых тип-сумм
Αλεχ
генерить одну энамку или разные?
Αλεχ
а ты уверен в ответе?
Sergey
нет 🙂
Sergey
но думаю генерить одну
Αλεχ
короч нинужна
Αλεχ
пишешь 1 раз энам
Αλεχ
и не знаешь бед
Αλεχ
кстати насколько замедлится компиляция еще интеерсно
Αλεχ
нужно же теперь для компиляции метода просканировать их все
Sergey
пишешь 1 раз энам
и либо ты заворачиваешь при вызове функции в энам либо пишешь приведение
Αλεχ
я думал мы только про callee
Αλεχ
ты на месте caller тоже неявно предлагаешь делать?
պլհկ
ну он хочет анонимные енамы просто, и вместе вызова неявный инто
Sergey
тебе так и так писать энам в месте вызова
из того, что я юзал в других языках не надо было заворачивать явно
պլհկ
где это есть кроме тайпскрипта?
Sergey
не думаю, что стоит так кричаще заявлять
պլհկ
they say flow, reason i see js, js
Cat
flaw*
andrei
they say flow, reason i see js, js
но ризон это окамл
Αλεχ
флоу ризон
флоу эта та хуйня на js где ты типа атрибутиками в комментах пишешь и оно чето чекает?
պլհկ
но ризон это окамл
в Standard ML такой хуйни не было!
Αλεχ
может в комментах может нет
чет ты сравнил мне кажется говно и ржавчину
Sergey
но я понял позицию
Sergey
спасибо
Yuriy
Я на самом то деле и TS и Flow тоже считаю говном, ибо нет Variadic Kinds, фейсбук факапит минорные релизы нонстоп, да и есть кучу кейсов библиотек для которых «вот нельзя просто взять и написать тайпинги».
Sergey
почему с дырами?
Αλεχ
а из говна конфетку не сделать никому
Sergey
> js > типобезопасны
Andrei
> js > типобезопасны
не js, а компилится в JS. как purescript.
Sergey
не js, а компилится в JS. как purescript.
флоу не компилится в жс это жс с типами
Αλεχ
а, я про reason/TS
TS это надмножество TS
Αλεχ
так что там те же прототипы, поведение и прочее говно
Sergey
enum Baz = Foo(Foo) | Bar(Bar); ?