I have a struct that has to arrays. Each of those must have the same sizes.

So while constructing the array, if you pass two arrays of different sizes the constructor must return nothing.

In Rust I could easily use Option<T>. D has no answer to Optional types as far as I am concerned. Is throwing exceptions the only idiomatic way?


---

What I already considered:

* Using Nullable!T: Okay but Nullable!T has all the overloads for regular T which makes the API even more unpredictable.

In Rust you don't just add a Some(44) and 34; No overloads for Some<T> and i32 are allowed (purposefully).

* Option!T from the optional package: Has even worse problem IMO. Not only it allows None + int but also it returns a `[]`. This API is not to my liking. You could say well Haskell has fmap for Optional etc, and I am aware of that, so does Rust with map etc. But I am talking about basic things: like `+`.

* Value-based error handling like Go and C: well, that works but the error checking is opt-in. There's no such thing as [[nodiscard]] in D too so the user of the API might as well forget to check for error value.

* if specialization: Clever workaround but sometimes the struct may fail for complex reasons, not only for a single condition.

Reply via email to