On Sunday, 3 January 2021 at 18:55:58 UTC, sighoya wrote:
```
alias matcherSignature(T:matcherSignature!T) = Matcher (T[]
matchers...);
```
Yet, it is right:
```
alias matcherSignature(T:matcherSignature!T) = Matcher
function(T[] matchers...);
```
But it didn't work likewise, you have to instantiate it
infinitely in nesting order.
I think you either need some kind of nominalism to state
matcherSignature!T exists for any T or you need to end it after a
certain depth:
```
struct theEnd {}
template matcherSignature(T) if (T==matcherSignature!T ||
T==theEnd)
{
Matcher function(T[] matchers...) fp;
}
```