Dr. Friedrich
google://how to record gifs like a boss google://how to record gifs like a Vasily
Romɑn
Dr. Friedrich
Найсовая гифка у тебя вышла!
gsomix
https://www.cockos.com/licecap/
Romɑn
LICEcap
спасибо
Romɑn
Со звуком!
лепер чтоле
Dmitry
Чо?
Romɑn
ее, получилось! )) Спасибо gsomix!
Romɑn
Dr. Friedrich
Мелковато чёт!
gsomix
Romɑn
Чо?
гифка со звуком локальный леперский ем
Dmitry
гифка со звуком локальный леперский ем
А, я то больше свалкер, не лепер
Крылатый
Vladislav
Romɑn
блин, у меня нормально записалось
Romɑn
Dmitry
Не шевелится
Romɑn
Не шевелится
это принтскрин гифки 😅
Bonart
Зато сколько полиморфизма - тру ООП
Да, трет он знатно, до дыр уже протер
Igor
Каламбуры подъехали
Igor
Dmitry
Как снимать гифки как Василий?
Кстати, если гифку (или даже картинку) послать в @DistortBot, то результат может получиться ещё круче
Dmitry
Romɑn
так лучше?
Romɑn
Pavel
оригинально =D
Éminence grise
Коллеги, это что https://stackoverflow.com/a/8376001? Это реально так писать столько бойлера? Что то я не догоняю - совсем с этим плохо похоже.
Vasily
Ну как бы логично
Vasily
На type extension перегрузка операторов не распространяется
Éminence grise
Я вообще тогда не понимаю, зачем нам называть ЭТО operator overloading/ Это operator overriding/ Бессмыслнный и жестокий.
gsomix
Для своих типов перегрузить оператор очень просто.
Vasily
Соглашусь с @gsomix в кои-то веки
gsomix
Ivan Ждем в F#5. :) https://github.com/Microsoft/visualfsharp/pull/3582
Éminence grise
У меня есть тип int, у него есть +/У меня есть собственно определенный + для листов. Типы разные. Почему не работает + для интов? Где логика типов?
Éminence grise
type Microsoft.FSharp.Collections.List<'a> with static member (+) (first: List<'a>, second: List<'a>) = first.Concat(second)
Vasily
Это type extension
Éminence grise
Все плюс для интов не работает
gsomix
Он не работает, потому что дальше оператор переопределили локально. let inline (+) a b = (?<-) ListExtension a b
Éminence grise
Нет - без инлайнов и каких либо ухищрений
Igor
Ivan Ждем в F#5. :) https://github.com/Microsoft/visualfsharp/pull/3582
Кто-нибудь считал размер компилятора в LoC?
Vasily
Хммм... а ведь match! уже подвезли , похоже
gsomix
Нет - без инлайнов и каких либо ухищрений
Работает. Проверяй свой код.
Éminence grise
Собственно пытаюсь добавить >=> и в резалт и в опшенс. Перекрывает все. Все что видит. Ну я конечно не настолько спец, чтоб уж просто офигеть. Но как операция над одним типом перекрывает операцию над другим? Насмерть. Только вот такой ворк эроунд нашел
Vasily
Иван, тебе сюда : https://github.com/fsharp/fslang-design/blob/master/RFCs/FS-1043-extension-members-for-operators-and-srtp-constraints.md
gsomix
А FsharpPlus значит не подходит?
Давай с простым случаем разберемся, да? :)
Éminence grise
Ловите: open System let (+) a b = a |> List.append b [<EntryPoint>] let main argv = printfn "Hello World from F#!" let c = 4 + 5
gsomix
Конечно, у тебя не будет работать для int теперь.
Vasily
Кстати, да
gsomix
Что нужно понять: (+) — это обычная функция, которую можно перекрыть локально.
gsomix
Как и любую другую.
Éminence grise
+ -это оператор. Он по умолчанию имеет два параметра. На него не распространяются проблемы выбора типов для оверлоада. На фига такой неестественный геморрой? Понять могу, и все ваши аргументы то же. Но - это не фига не логично. То есть совсем
gsomix
(+) — это обычная функция.
Éminence grise
Лови декомпиляцию: [CompilationMapping] public static class Program { [CompilationArgumentCounts(new int[] {1, 1})] public static FSharpList<a> operator +(FSharpList<a> a, FSharpList<a> b) { return ListModule.Append<a>(b, a); } [EntryPoint] public static int main(string[] argv) { ExtraTopLevelOperators.PrintFormatLine<Unit>((PrintfFormat<M0, TextWriter, Unit, Unit>) new PrintfFormat<Unit, TextWriter, Unit, Unit, Unit>("Hello World from F#!")); FSharpList<int> fsharpList = (FSharpList<int>) (FSharpList<int>.Cons(4, FSharpList<int>.get_Empty()) + FSharpList<int>.Cons(5, FSharpList<int>.get_Empty())); return 0; } }
gsomix
Я не вижу смысла продолжать разговор.
Éminence grise
Это обычная функция?
gsomix
Были бы мы в основном чате — отправил бы читать спеку.
Éminence grise
На ней же атрибут висит.
Éminence grise
Да читал я спеку. Потому и не в основной чат пишу. Я как раз и не понимаю почему так?
Ayrat
Декомпиляция тут не роляет, т.к. это C# код, а F# живёт по спеке. И вот по спеке let (+) это обычное объявление функции, которая затеняет + в типе int точно так же как let abc затрёт и переопределит все предыдущие abc
Ayrat
я написал шадовинг
Ayrat
а потом подумал
Ayrat
и заменил на ЗАТЕНЯЕТ )))
Vasily
Оттеняет
Éminence grise
Да по спеке я понимаю. Не понимаю зачем? Ведь даже парсер объявление оператора обрабатывается по другому. Почему надо было вводить такие ограничения. Что это дало? Затенило то оно опреатор с другим типом. Я прекрасно понимаю почему в FSharp нет каррированных функций оверлоадов. Там не определишь наличие праметров и их количество. Но операторы то ДЕТЕРМИНИРОВАНЫ в этом отношении. Зачем этого лишать?
Éminence grise
Причем inline как то с таким подходм разбирается. Но ведь в данном случае даже инлайн не нужен. Типя статически могут поддерживать ту или иную операцию. В общем я слегка оболдел, сколько надо написать бойлера, что бы добавить свою операцию, не прикрывая уже существующего определения напрочь.
gsomix
Я подышал.