Ayrat
Хм, я тут подумал что толку от ValueOption довольно мало. Если сделать например Array.chooseV :: ('a -> ValueOption<'a>) -> 'a array -> 'a array то т.к. массив на хипе, он утащит все валуе опшны за собой на хип если только явно не стакаллочить этот самый массив
Ayrat
сиквены и листы без шансов будут на хипе.
Vasily
В ValueOption вообще смысла мало :)
Ayrat
Ну да. Если у тебя хайперф сценарий лучше уж без хипстерской мути обойтись и на null почекать пару раз
Hog
сиквены и листы без шансов будут на хипе.
сиквенс же - просто фция, не?
Ayrat
Не понял тебя сейчас
Hog
ну илдит следующий элемент по запросу
Ayrat
ну это тем не менее енумератор.
Hog
вот - int? - как раз может быть :))))
Vasily
Хотя зависит от предметной области
Hog
Int32.MinValue
Андрей
удалить при этом en-IE не смог
Дык ты весь Вынь на en-US переведи и делов
Vasily
Int32.MinValue
Глубоко копаете, Григорий
Андрей
Ну не, а вдруг это валидно
Vasily
Ну не, а вдруг это валидно
Я ж грю, зависит от предметной области
Vasily
Решается скорее разными структурами
Hog
Option<int>
Hog
:))))
Vasily
Option<int>
Ты не понял
Hog
Nullable<int>
Hog
ValueOption<int>
Aleksandr
Option<int>
Option<_> как раз heapalloc
Roman
а кто-нибудь из вас в реальной жизни сталкивался с ситуациями, когда использовать Option/ValueOption это слишком дорого и надо вот с этим извращаться?
Hog
Option<_> как раз heapalloc
осознал! и исправил!
Roman
единственная известная мне ситуация — это сервер тегов у стековерфлоу
Aleksandr
А у нас, кстати, разве DU может быть struct типами?
Roman
там был цикл статей как они уродовали код во имя быстродействия
Hog
struct A | B |C ???
Андрей
а какой сценарий был?
Много мелочи в массиве, или много апдейтов в большой структуре
Aleksandr
Там скорее атрибут используют
Андрей
struct A | B |C ???
[<Struct>] Type DU...
Hog
[<Struct>] Type DU...
прикоольно
Roman
тут несколько раз уже мелькали) Например, type [<Struct>] Money of decimal
Roman
абстракция нахаляву
Hog
type [<Struct>] Money of decimal<USD>
Roman
type [<Struct>] Money of decimal<USD>
а синтаксис правильный?
Roman
я юнитами не пользовался пока ни разу
Андрей
Да вот это кстати гут, newtype для бедных
Hog
анврапать тока заимеешься везде
Bonart
абстракция нахаляву
Такую и в сишарпе намутить можно, правда бойлерплейта больше
Roman
Кроме, наверное, сртп
Bonart
Это применимо почти ко всему в фш
Ну DU в сишарпе получаются такеи, что лучше не надо
Bonart
do-нотация в эфшарпе няшная и сишарпом де-факто не покрываемая
Aleksandr
А о какой do-нотации речь? Если я не ошибаюсь, это какая-то вещь из хаскелла и похожа она на наш CE
Aleksandr
Но только при чем здесь DU?
Vasiliy
Кстати, так есть хоть какая-ниудь красивая имплементация REsult в с# или легче перетянуть всех на f# ? :D
Aleksandr
Это невозможно, там же все типы - произведения
Aleksandr
Если поля должно быть два то их никак скрыть не получится
Aleksandr
Хотя можно попробовать сделать один общий и пустой интерфейс IResult и имплементировать его два раза: в Ok<A> и в Error<B>, а потом свитч кейсом разбирать в даункастах каждый раз. Ну тоже такое себе
Aleksandr
Плюс надо, чтобы вызывающая сторона знала эти A и B. Чет совсем говно выходит)
Klei
Если поля должно быть два то их никак скрыть не получится
Можно заставить обрабатывать оба кейса для извлечения значения.
Aleksandr
В смысле договориться?
Aleksandr
Если так, то звучит не слишком изящно
Klei
Заставить.
Klei
Нет пропов, есть только метод на две лямбды с одним типом результата.
Aleksandr
GetResult: (TError -> TResult) -> TResult
Ivan
Кстати, так есть хоть какая-ниудь красивая имплементация REsult в с# или легче перетянуть всех на f# ? :D
я могу тебе дать свой велосипед с Result и Option, но красотой это врядли назовешь
Aleksandr
GetResult: (TError -> TResult) -> TResult
Что-то вроде такого?
Ivan
Давай )
5 сек ушел рыться
Klei
Но да, типа такого.
Aleksandr
Handle: (TError -> a)*(TResult -> a) -> a
Aleksandr
Хм, ну действительно, можно так
Aleksandr
Отдельно для void еще сделать вариант
Aleksandr
Кстати, мне одному не нравятся недавно появившиеся локальные функции в C#?