Unfortunately, there is a limit :)

`equal!(equal!equal)` won't work, as when you pass `equal!equal` as an comparison argument, the compiler doesn't find the template, because of the partial specification.

So currently, you have to do something along the lines of:
```D
    int[][][] b;
    equal!(equal!(equal, int[][], int[][]))(b, b);
```

Yuk!

That said, I think that if we made equal a template, eg:
```D
template equal(Comp)
{
    bool equal(R1, R2)
    {
        //...
    }
}
```

Then it *should* be possible to make it work. I'll keep this enhancement in mind, maybe I'll implement it in a near future.