Kirill
Там же на втором этаже вроде потолка нет на лестнице
Kirill
и можно быстро залетать на третий этаж в нужную часть с ящиком
Kirill
(или как раз на третьем нет, не помню точно)
Bonart
Но го тебя форсит копипастить в любой ситуации
Правильно говорить гописпастить
Диёр
Ну ide'шка же прячет
Dr. Friedrich
это как - изотопы с меньшим количеством нейтронов?
Сталь — это сплав же. В зависимости от состава можно разные характеристики получить.
Dr. Friedrich
И даже от обработки.
Bonart
Ну ide'шка же прячет
Это называется "читать без проблем"? Гитхаб тоже засахаривает?
Shub
На го там пишется всякая мелочь, чаще всего для внутреннего использования. Но в этом аспекте там питона раз в 10 больше, чем го
Shub
имхо, хороший язык должен помогать эксперту, а не новичку. Отбирая мощный инструмент у новичка, ты мешаешь ему стрелять по ногам, но так же мешаешь нормальным инженерам делать свою работу. Получается, такой язык выгодней использовать, когда бОльшая часть полезной работы в компании делается программистами с уровнем ближе к начальному, и рост этого уровня не планируется.
У Хью Лори начинается роман с вопроса «как бы вы ломали руку незнакомцу: резко или медленно?». С этой точки зрения нехай новичок отстреливает себе ногу, чем медленно отпиливает тупой и ржавой пилой. Язык скорее должен не позволять новичку отстреливать ноги всему проекту.
Shub
Я думаю, если б «Красный Дракон» писался сегодня, то Вернон Ворхеес получил бы набор микросервисов на го, а не зеркало с удавкой
Roman
кто-нить что-нить знает про darklang?
Ayrat
Проблемы в скала чате
Ayrat
сдаюсь опять реально ли в дотти определить инстанс профунктора для любого бифунктора, у которого есть инстансы функтора и контрафуктора для соотв-х дырок? type Cov = [F[_, _]] =>> [A] =>> [B] =>> F[A, B] type Con = [F[_, _]] =>> [B] =>> [A] =>> F[A, B] given ProfuctorFromCovariContra[A, B, F[_, _]] as Profunctor[F] given (covary: Functor[Cov[F][A]], contra: Contravariant[Con[F][B]]) { def dimap[A, A2, B, B2](f: A2 => A)(g: B => B2)(p: F[A, B]): F[A2, B2] = { val x = contra.contramap(f)(p) val xx = covary.fmap(g)(x) xx } }
Ayrat
А вот и ответ, как же это сделать.
Ayrat
Можно въебать говна и написать для скалы 2 object mkProfunctor { trait Forall[F[_]] { def apply[A]: F[A] } object Forall { private[Forall] object Private { private[Forall] type T } type Hole1[C[_[_]], F[_, _]] = { type l[A] = C[F[?, A]] } type Hole2[C[_[_]], F[_, _]] = { type l[A] = C[F[A, ?]] } implicit def fromImplicitDefHole1[C[_[_]], F[_, _]](implicit lp: shapeless.LowPriority, c: C[F[?, Private.T]]): Forall[Hole1[C, F]#l] = { new Forall[Hole1[C, F]#l] { override def apply[A]: C[F[?, A]] = c.asInstanceOf[C[F[?, A]]] } } implicit def fromImplicitDefHole2[C[_[_]], F[_, _]](implicit lp: shapeless.LowPriority, c: C[F[Private.T, ?]]): Forall[Hole2[C, F]#l] = { new Forall[Hole2[C, F]#l] { override def apply[A]: C[F[A, ?]] = c.asInstanceOf[C[F[A, ?]]] } } } type ForallHole1[C[_[_]], F[_, _]] = Forall[Hole1[C, F]#l] def ForallHole1[C[_[_]], F[_, _]](implicit ev: Forall[Hole1[C, F]#l]): Forall[Hole1[C, F]#l] = ev type ForallHole2[C[_[_]], F[_, _]] = Forall[Hole2[C, F]#l] def ForallHole2[C[_[_]], F[_, _]](implicit ev: Forall[Hole2[C, F]#l]): Forall[Hole2[C, F]#l] = ev implicit def fromFunctors[F[_, _]: ForallHole1[Contravariant, ?[_, _]]: ForallHole2[Functor, ?[_, _]]]: Profunctor[F] = new Profunctor[F] { override def dimap[A, B, C, D](fab: F[A, B])(f: C => A)(g: B => D): F[C, D] = { val contra: Contravariant[F[?, B]] = ForallHole1[Contravariant, F].apply[B] val aftercontramap: F[C, B] = contra.contramap(fab)(f) val functor: Functor[F[C, ?]] = ForallHole2[Functor, F].apply[C] functor.map(aftercontramap)(g) } } }
Ayrat
И знаете что самое смешное?
Ayrat
Это отрывок кровавого энтерпрайза :^)
Vasily
Ебанина какая-то
Vasily
В скале любят умные слова
Vasily
Типа профунктора
Ilya
О, это ж название канала с мемами, да?
Ayrat
Типа профунктора
Ну если бы просто он. Тут же - профунктор бифунктора!
Vasily
А на деле все же какое-то говно лепят
Ayrat
А на деле все же какое-то говно лепят
Так они это ещё в энтерпрайз затащили.
Vasily
В скале процент ебанутых выше, конечно
Ayrat
"Приходишь ты в фин тех, а там сидят два Васи и бубнят, профунктор бифунктора, бифунктор профунктора... Так и хочется леща им дать чтобы не писали больше профункторов."(c) Молдован
Hog
:))))
Hog
На половине книжки про котлин - реально выглядит как better java, а не вот это вот всё
Ayrat
Ага. И юнит есть. Но с генериками там общая беда
Aleksandr
И знаете что самое смешное?
То, что большинство закоренелых сишарпистов видят F# ТАКИМ ЖЕ
Edward
Shub
Это в духе пик точеных или ... известной альтернативы?
это в буквальном смысле фабула "Красного дракона"
Анна
Doge
И знаете что самое смешное?
Так профунктор - сильно часто встречающаяся штука. При этом не сильно сложная.
Doge
Хочешь линзы - нужны профункторы. Хочется что-нибудь типа пайплайнов и им подобных - опять таки появляются профункторы.
Doge
Причем ничего пугающего в них кроме названия - нет. Абсолютно элементарная штука
Doge
Ну и дальше код
Это уже чисто скаловские проблемы, хотя даже этот код не сильно сложный, хоть и смотрится устрашающе.
Dr. Friedrich
Ах, так это ещё не сильно сложный!
Doge
Ах, так это ещё не сильно сложный!
Имхо, всякая тайплевел магия обычно сложнее. Да и в этом примере мне кажется, что его можно проще описать, будет тогда норм
x
даже бинда можно испугаться, увидев имплементацию на сишарпах
Ayrat
Лол. Чел выше работает в консалтинге. Кстати контора в Дублине и нанимает фшарпистов!
Ayrat
Чел выше - это который из скала чатика с профункторами
Ayrat
То есть они такой код кому-то внедряют и убегают.
Vasily
В валмарте сидит?
Ayrat
Не. Просто в фирме, которая занимается софтвар консалтингом
Vasily
Сурово
Vasily
Вообще, конечно, дичь написана
Doge
То есть они такой код кому-то внедряют и убегают.
Так у них эта штука небось чисто в инфраструктуре сидит. У них свой набор тайпклассов есть для работы с ZIO
Vasily
Впрочем, консалтинг дело такое
Ayrat
Сурово
Просишь ты их сделать что-то, денег платишь. А они тебе профункторы в код пихают и на себя подсаживают
Vasily
Надо постоянно обеспечивать себя работой
Ayrat
Им же выгоднее сделать дичь
Vasily
Ну и я вообще не понимаю бенефитов такого кода. На фшарпе я один раз написал, привел в понятный вид и оно работает и поддаётся рефакторингу не мной
Vasily
Здесь же без автора хер разберёшься
Ayrat
Это не скейлится. Софт он не только в ДЦ должен горизонтально скейлится, но ещё и в плане суппорта. То есть если я напишу 10 таких систем и мне на каждую надо команду суппорта (которые бай дефинишн не шарят в тайп левел магии, это дешёвая сила, которая освобождает дорогую силу писать что-то ещё) - это значит кто-то нахуевертил дичь
Ayrat
Такой код может быть оправданием только для джоб секьюрити или амачуров
Vasily
Тоже верно
Vasily
Ну и ещё служит средством возвышения себя в глазах быдла
Ayrat
И это тоже
Ayrat
я кстати заметил что начал впихивать где не надо англицизмы в русскую речь. Надо с этим бороться
Vasily
Ггггг
Vasily
То ли ещё будет
Ayrat
Да, предыдущая пара реплик прямо пиджин рашен какой-то
Да, я тоже это заметил. Но почему-то когда писал всё было ок. Перечитал - ужаснулся
Doge
Здесь же без автора хер разберёшься
Ну, это спорное утверждение. Мне там понятно, что и как хотел сказать автор. Требуется просто какой-то бэкграунд в скале и её около ФП подходах.