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