It should work if you use "source" afterwards to get the length back. Also, the "length"/"index" mapping is a bit less trivial:
```D
static if (direction)
{
    size_t n = haystack.findAmong(needles).length;
    return n ? haystack.length - n : -1;
}
else
{
    size_t n = haystack.retro.findAmong(needles).source.length;
    return n ? n - strideBack(haystack, n);
}
```
This should work I think. This will actually have a "little" overhead, as the elements of `haystack` will be decoded, then re-encoded in the find among, but, IMO, that fine: As long is it only happens once. The problem is if you decode `needles` repeatedly.

You could squeeze extra performance if you used my above algorithm with `strideBack`, but I'm not sure it warrants the extra complexity.