Generic type constraint at public init() prevents hiding of internal implementation detail type I want to hide, is there anyway to overcome this?

I don't know how the user would know what T is. But is the same as the built-in ForEach, only it iterate the collection provide index instead of element to the content view closure. All the types are known to the caller.

The signature of this ForEach.init do not have IdentifiableIndices<T> at all. This is why do don't want to expose this type.