Size: a a a

2020 December 22

I

IdiocyAcceptance in F# Chat
разве нет?
источник

I

IdiocyAcceptance in F# Chat
Vladimir Shchur
так это не тип проверяется, а кастится к разным интерфейсам
this
источник

I

IdiocyAcceptance in F# Chat
Vladimir Shchur
нету такого что если массив,то так, а если лист то эдак
вроде была где-то оптимизашка конкретно для массивов
источник

MS

Mark Shevchenko in F# Chat
Vladimir Shchur
непонятно откуда слух пошел)
источник

MS

Mark Shevchenko in F# Chat
Самый первый метод:
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
           if (source == null) throw Error.ArgumentNull("source");
           if (predicate == null) throw Error.ArgumentNull("predicate");
           if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate);
           if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate);
           if (source is List<TSource>) return new WhereListIterator<TSource>((List<TSource>)source, predicate);
           return new WhereEnumerableIterator<TSource>(source, predicate);
       }
источник

MS

Mark Shevchenko in F# Chat
Это я нагуглил сейчас. А в своё время краем глаза в исходники заглядывал, подсмотрел, какая там реализация.
источник

I

IdiocyAcceptance in F# Chat
Mark Shevchenko
Самый первый метод:
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
           if (source == null) throw Error.ArgumentNull("source");
           if (predicate == null) throw Error.ArgumentNull("predicate");
           if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate);
           if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate);
           if (source is List<TSource>) return new WhereListIterator<TSource>((List<TSource>)source, predicate);
           return new WhereEnumerableIterator<TSource>(source, predicate);
       }
интересно, jit может схлопывать такие штуки на колсайте или нет?
источник

I

Igor in F# Chat
IdiocyAcceptance
плюс не совсем ясно что с размером кода делать на самом деле - интерфейсы хоть и абстракция со своими перф минусами, они позволяют не генерировать код под каждый возможный энумератор
реализация по умолчанию может быть
источник

I

IdiocyAcceptance in F# Chat
надо Егора помучить этим вопросом
источник

VS

Vladimir Shchur in F# Chat
хм, я мб какие-то другие исходники смотрел, сча гляну
источник

VS

Vladimir Shchur in F# Chat
аа, эти же, только видимо снизу начинал) а снизу там нету проверок
источник

MS

Mark Shevchenko in F# Chat
Да, если что, я тоже не за то, что давайте вот прямо немедленно тайп-классы и HKT завозить.
источник

I

IdiocyAcceptance in F# Chat
У кого-нибудь есть примеры как HKT могут фаршу помочь?
источник

I

IdiocyAcceptance in F# Chat
Я чёт немного посмотрел, потыкал, но не вкурил наверное
источник

MS

Mark Shevchenko in F# Chat
Да, есть такая штука, да, интересная, да, было бы неплохо.
источник

P

Pavel in F# Chat
Читал убедительный разбор почему в Elm без тайпклассов плохо (тк сравнения значений без них через жопу), но к фшарпу это не относится
Если что тут https://reasonablypolymorphic.com/blog/elm-is-wrong/
источник

MS

Mark Shevchenko in F# Chat
В F# есть SRTP, оно во многом спасает.
источник

VS

Vasily Shapenko in F# Chat
Тайп классы сильно помогут в сериализации
источник

PD

Prunkles Dreemurr in F# Chat
А что, варианты, где можно очень красиво записать
val intOpt: int option
let strOpt: string option = intOpt <!> string

, где <!> — оператор map
мы не рассматриваем?
источник

VS

Vladimir Shchur in F# Chat
IdiocyAcceptance
У кого-нибудь есть примеры как HKT могут фаршу помочь?
у меня например в пульсаре была задача - складывать сообщения параметризовынные разными типами в одну очередь входящих сообщений, т.е. есть сообщения Message<A>, Message<B>, и я их не могу положить в одну коллекцию Collection<Message>
источник