Size: a a a

2021 April 23

AH

Ayrat Hudaygulov in pro.net
сегодня квас был. Но уже посетили мысли о винище
источник

A

Aloraman in pro.net
Один инстанс - да, тип Unit
Прост Void уже занят, а полноценный Bottom тип тоже невозможен в CLR
Поэтому кажется норм звать Unit тип None , а Bottom тип - Never (в котором на все exception кидается и экземпляр породить нельзя)
None в принципе подходит для Unit. None - пустое множество конечно, но все возможные его значения {None} уже с  кардинальным числом 1
источник

AH

Ayrat Hudaygulov in pro.net
не знаю зачем ты так упираешь на CLR, такое ощущение что кастомеры твоей библиотеки пишут на голом IL
источник

A

Aloraman in pro.net
Хочется ж не только на монады дрочить, но и байты ебать!
источник

AH

Ayrat Hudaygulov in pro.net
это как сокрушаться что bottom type невозможен в ассемблере поэтому на CLR нихуя написать нельзя
источник

AH

Ayrat Hudaygulov in pro.net
а почему бы не сделать класс с приватным конструктором? для целей монадоебли сойдет
источник

AH

Ayrat Hudaygulov in pro.net
type Void private () = class end
источник

A

Aloraman in pro.net
источник

AH

Ayrat Hudaygulov in pro.net
Ну да) Нормальный же план. Тебе этот Nothing/Never/Void только для тайпчеков нужен
источник

A

Aloraman in pro.net
Да у меня уже есть)
источник

A

Aloraman in pro.net
Если назвать bottom Never можно такую херню запилить
public static Never Reached
       {
           [ContractAnnotation("=> halt")]
           get => throw new InvalidOperationException("This invocation must be unreachable");
       }
источник

A

Aloraman in pro.net
и делать return Never.Reached и Never.Invoked()
источник

MS

Mark Shevchenko in pro.net
Either не надо делать структурой. Пусть будет классом с обязательным конструктором. И будет счастье!
источник

MS

Mark Shevchenko in pro.net
А в F# Result вообще превращается в иерархию из трёх классов. :)
источник

IC

Ilya L Che in pro.net
Кажется, решили, но тебе не понравится.
https://github.com/dotnet/csharplang/issues/1407
источник

A

Aloraman in pro.net
Но как же байты.
Хотя вариант если со стека не уезжать, то жирненькую структуру Either, а для долговременных ситуаций класс OneOf
источник

AH

Ayrat Hudaygulov in pro.net
блеать.

то есть предлагается на каждый метод с валуетаском вешать кастомный асинкБилдер?

[AsyncMethodBuilder(UseMyCustomValueTaskSourceMethodBuilder)]
public async ValueTask<T> SomeMethodAsync() { … }
источник

AH

Ayrat Hudaygulov in pro.net
Ну не, это не решение
источник

IC

Ilya L Che in pro.net
О, нашёл.
https://github.com/dotnet/roslyn/issues/52192
Просто всё обмазано нуллабилити.
источник

AH

Ayrat Hudaygulov in pro.net
тебе в раст!
источник