Vladimir
Это скорее всего значит что опшн вместо резалта заюзан чтобы узнать детали ошибки
Your name could be here
а в чём тут отличие от обычных дженериков? interface Graph<Node, Edge> { createNode: int -> Node createEdge: ... } class MyGraph: Graph<Int, MyEdge> { ... }
Хз, как в скале или хаскеле, но в расте ты можешь разделить имплементацию трейта отдельно от самого типа. То есть, ты можешь его реализовать даже для тех типов, которые лежат в библиотеке и ты не можешь обращаться к ним напрямую, как это сделано в оо Тем более, это далеко не интерфейс, не какой-то тип, а предикат
Your name could be here
Хз, нормально объяснил или нет
Ayrat
Оу, не дочитал, сорян
Там ещё много интересного!
Анна
Норм нафлудили за ночь!
Анна
Открываю, а тут половина сообщений - код 😱
Doge
Там ещё много интересного!
Я, кстати, придумал пример именно для path dependent типов, который через дженерики, как мне сейчас кажется, не выражается. (Можно попробовать через экзистенциальные типы, но будет скорее всего больно) https://scastie.scala-lang.org/Ri0RfcnkSdW1P8xQPJKNEQ
Vladyslav
Кто-то на http://dotnetfest.com/ идет?
Vasily
А шо есть Path dependent types?
Doge
Во, нормальный пример. Сходу не вижу вариантов для дженериков. Возможно даже их нет
Можно попробовать через дженерики и скаловские экзистенциальные типы, но у меня быстро не получилось, но я и скаловские экзистенциальные типы почти не трогал никогда.
Vasily
Мы в консерваториях не кончали, вы уж извиняйте за вопрос
Ayrat
А шо есть Path dependent types?
А вот пример сразу выше посмотри
Doge
А шо есть Path dependent types?
Это чисто скаловская придумка. Суть в том, что вот эти внутренние типы (Node, Edge) у двух разных инстансов интерфейса Graph не равны другдругу.
Vladimir
я думаю такое можно с анонимными типами сделать) если они из двух разных мест пришли, то будут несовместимы
Vasily
Не, ну я в целом понимаю, зачем
Romɑn
Звучит как гомосятина
С графом как раз логично
Vasily
Для графа
Vasily
Шоб оно не скомпилилось, если вдруг чего
Vasily
Но астронавтику все же придумывали для того, чтобы человечество вышло в космос
Vladimir
Anonymous
Vladislav
А врач что по этому поводу говорит?
Уровень ооп в крови опасно низок
Doge
Во, нормальный пример. Сходу не вижу вариантов для дженериков. Возможно даже их нет
Оказалось на удивление сложно ночью, сходу придумать или найти такой пример. Потому что большинство хитрых использований этой фичи дополнительно ещё и на имплиситы завязаны, что уже не то.
Roman
Чувак хочет затащить в код проекта линзы, мне становится страшно
Vasily
Мне вот хочется затащить FSharp.Data.Adaptive, но пока рано
Roman
как объяснить человеку, что он пишет на фшарпе, и ему пора смириться, что это не хаскель?
Vasily
Что чувак, у нас не хаскель, у нас продакшн
Roman
пробовал
Vasily
То, что работает в хаскеле, в продакшне работает плохо
Roman
"ну как это, вот смотри, работает"
Vasily
Кто всю эту поебень будет поддерживать, еще вопрос
Vasily
Короче, классический у тебя случай "знает, что хочет, но не знает, зачем"
Roman
по-моему, у меня наоборот. Знает, зачем, но не понимает, во что ввязывается
Vasily
Возможно
Vasily
Но это карма, походу
Vasily
Архитектурные астронавты - ребята такие
Roman
дак самое смешное, у нас нет архитектуры никакой
Roman
иерархия утилс модулей — вот и все, что у нас есть
Doge
Чувак хочет затащить в код проекта линзы, мне становится страшно
А с ними в шарпе вообще можно работать, чтобы было не больно?
Doge
Кто-нибудь пробовал?
Λ ll И K X
Архитектурные астронавты - ребята такие
как это в функциональном мире выглядит? в ООП абстрактыне фабрики фасадов декораторов стратегий. В фп монадами обмазывают?
Vasily
В общем, обычно это натягивание совы на глобус
Roman
как это в функциональном мире выглядит? в ООП абстрактыне фабрики фасадов декораторов стратегий. В фп монадами обмазывают?
когда, например, вместо простого паттерн матчинга городят легионы инлайн функций, у типов прописывают сотни методов под эти инлайн функции, потом эти инлайн функции люто, бешено чейнят, и у тебя получается что-то вроде let shit r = r |> extract |> either Ok (konst blabla) вместо let shit r = match r with | Ok r -> Ok r | Error e -> doSomething e
Vladislav
и скажи что это хуйня
Roman
и ты такой "блять пожалосто не надо больше" а тебе такие "нееет, бля, кушай ситичком"
Roman
покажи ему линзы на хаскеле и фшарпе
ну на хаскеле он видел, а на фарше грит "да подключим кодген и все будет типтопчик"
Vladislav
в итоге напоминает исходник FParsec только хуйня
Roman
загоняют все в резалт и с кучей операторов и монадами
о, у нас так. Самое смешное, что ошибки строковые и в половине случаев вообще игнорятся. Зато без эксепшенов!
Roman
У. НАС. НЕТ. ИСКЛЮЧЕНИЙ. Потому что харам.
Roman
что, конечно, ложь, пушто местами можно встретить failwith "mne pohuj"
Doge
У. НАС. НЕТ. ИСКЛЮЧЕНИЙ. Потому что харам.
Самое смешное в этом то, что в хаскеле-то они ещё как есть
Doge
Причем в нескольких разных видах
Roman
Самое смешное в этом то, что в хаскеле-то они ещё как есть
А самое грустное, что код от этого не стал ни более читаемым, ни более поддерживаемым. И он даже не тестируемый.
Vladislav
мне так кажется
Vladislav
иначе в облаках витаешь и хрень пишешь
Vasily
А есть у нас тут знатоки LanguagePrimitives.EnumToValue?
habib
type SomeEnum = Value1 = 10 | Value2 = 20 SomeEnum.Value1.ToString() -> "Value1" SomeEnum.Value1.GetHashCode() -> 10
habib
можно так
habib
не катит?
Vasily
Ну мне бы к инту
habib
там и к инту
habib
GetHashCode()
Vasily
Мдя
Vasily
Я тут просто смотрю Litedb 5