On Sunday, 16 May 2021 at 09:55:31 UTC, Chris Piker wrote:
On Sunday, 16 May 2021 at 09:17:47 UTC, Jordan Wilson wrote:

Another example:
```d
auto r = [iota(1,10).map!(a => a.to!int),iota(1,10).map!(a => a.to!int)];
# compile error
```
Hi Jordan

Nice succinct example.  Thanks for looking at the code :)

So, honest question. Does it strike you as odd that the exact same range definition is considered to be two different types?

    Even in C
    ```
    typedef struct {
        int a;
    } type1;
    ```
    and
    ```
    struct {
        int a;
    } type2;
    ```

are two different types. The compiler will give an error if you pass one to a function waiting for the other.

```
void fun(type1 v)
{
}

type2 x;

fun(x);  // gives error
```
See https://godbolt.org/z/eWenEW6q1

Maybe that's eminently reasonable to those with deep knowledge, but it seems crazy to a new D programmer. It breaks a general assumption about programming when copying and pasting a definition yields two things that aren't the same type. (except in rare cases like SQL where null != null.)




On a side note, I appreciate that `.array` solves the problem, but I'm writing pipelines that are supposed to work on arbitrarily long data sets (> 1.4 TB is not uncommon).


Reply via email to