Skip to content

Nested map calls #111

@jmh530

Description

@jmh530

I have one function that applies map and then another function calls that function and adds another map to it. I get an error about nesting pipe calls or something. If I manually use pipe or combine the functions, then there is no error.

auto foo(T)(T x)
{
    import mir.ndslice.topology : map;

    return x.map!(a => a + 1);
}

auto bar(T)(T x)
{
    import mir.ndslice.topology : map;

    return x.foo.map!(a => a + 2);
}

void main()
{
    import mir.ndslice.topology : iota, map;
    import mir.functional : pipe;
    import std.stdio : writeln;

    auto data = iota(5);
    auto result = iota([5], 3);

    auto x = data.map!(a => a + 1).map!(a => a + 2); //piping them normally works correctly
    assert(x == result);
    
    auto y = data.bar; //error here
    //assert(y == result);
    
    auto z = data.pipe!(foo, a => a + 2); //this works too
    assert(z == result);
}

Error (note: using 0.7.0-alpha8):

C:\ProgrammingFiles\DFiles\testing\testing_mir_algorithm>dub run
Performing "debug" build using dmd for x86.
mir-algorithm 0.7.0: target for configuration "library" is up to date.
testing_mir_algorithm 0.0.1: building configuration "application"...
..\..\dubFolder\mir-algorithm-0.7.0-alpha8\source\mir\ndslice\iterator.d(621,71)
: Error: template instance pipe!(__lambda2, __lambda2) pipe!(__lambda2, __lambda
2) is nested in both foo and bar
..\..\dubFolder\mir-algorithm-0.7.0-alpha8\source\mir\ndslice\iterator.d(633,24)
: Error: template instance app.bar!(Slice!(cast(SliceKind)2, [1u], IotaIterator!
int)).bar.__map!(__lambda2) error instantiating
..\..\dubFolder\mir-algorithm-0.7.0-alpha8\source\mir\ndslice\topology.d(2262,52
):        instantiated from here: mapIterator!(__lambda2, MapIterator!(IotaItera
tor!int, __lambda2))
source\app.d(12,17):        instantiated from here: map!(cast(SliceKind)2, [1u],
 MapIterator!(IotaIterator!int, __lambda2))
source\app.d(27,18):        instantiated from here: bar!(Slice!(cast(SliceKind)2
, [1u], IotaIterator!int))
dmd failed with exit code 1.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions