Splitting std.typecons [Was: Re: RFC: std.sumtype (adding sumtype to Phobos)]

Petar Petar
Wed Nov 25 16:50:53 UTC 2020


On Wednesday, 25 November 2020 at 16:22:31 UTC, Paul Backus wrote:
> On Wednesday, 25 November 2020 at 16:02:01 UTC, Petar Kirov 
> [ZombineDev] wrote:
>>
>> FWIW, I'd prefer not to split `std.typecons` into independent 
>> modules like `std.tuple`, `std.nullable`, `std.unique`, etc., 
>> but as as a package containing those modules: 
>> `std.typecons.tuple`, `std.typecons.nullable`, 
>> `std.typecons.unique`. So sumtype could continue to leave in a 
>> single module, but under the `std.typecons` package: 
>> `std.typecons.sumtype`. A few years ago we split std.algorithm 
>> like that and this didn't breaking any existing code as far as 
>> I remember, as we used `public import`s for backward 
>> compatibility.
>
> I just don't see any reason for the extra level of nesting. The 
> module name `std.typecons.tuple` doesn't convey any more 
> information than `std.tuple`. Are we saving the name 
> `std.tuple` for something else? Are we planning on having 
> multiple `tuple` modules in Phobos, such that we'll need to 
> distinguish between `std.typecons.tuple` and 
> `std.something_else.tuple`?
>
> We can (and should, of course) use public imports for backward 
> compatibility regardless of what we name the new modules.

Well, perhaps `tuple` is a clear enough name, and it could stand 
on its own, but what about things like BlackHole? For me the 
reasons for the nesting are:
* (subjective) it looks better organized and aesthetically 
pleasing to put related modules under a single package. Even if I 
would design the module structure from scratch, I'd still put 
`tuple` under `typecons` (or e.g. `algebraic` / `adt`, along with 
`sumtype`).
* After the split, existing users won't have troubles (however 
small) finding the modules as they would remain grouped under 
their original `typecons` parent
* Nothing to deprecate -> no future breaking changes


More information about the Digitalmars-d mailing list