DigitecGalaxus / Galaxus.Functional

A package bringing popular functional abstractions (e.g. Option or Result) to C#.
Other
37 stars 12 forks source link

Nullable reference types #2

Closed phkiener closed 4 years ago

phkiener commented 4 years ago

The nullable reference types are a cool feature - the few places where do allow nulls would be a great place to put a shiny little ?.

NoelWidmer commented 4 years ago

@phkiener This will not work because using T? requires T to be

  1. either a value type
  2. or a not nullable reference type

We usually just use T without constraints (Option<T> or Either<A, B>). The problem is that the compiler needs to know wether 1. or 2. is the case. And we cannot say which is the case because we always need both at the same time.

grafik

We can get around this issue by using the ! operator. But that negates the benefit almost completely. I think the overhead of doing this outweights the benefits.

See also:

phkiener commented 4 years ago

Damn, you're right. And the hole goes all the way down - even if we were to just annotate the entries to the abstractions (ToOption() and the likes), it would just spiral down like async does.

Still a shame though, they're a nice feature and something that could help when integrating. But it won't be worth it if we basically have to rework large parts... better accept it and know where stuff is null than introduce a bazillion breaking changes.

NoelWidmer commented 4 years ago

I feel like Microsoft should iterate on the design of nullable refs. Maybe we will see an improved version in a future C# version which is more flexible that the current design. One where we can use value and reference types interchangeably.

Shall we close the issue as won't do?

phkiener commented 4 years ago

Yeah, that's fine by me.