In the #idris stdlib, Control.Relation.Closure.TransClosure.(::) captures the intermediate index/element as a relevant, but implicit argument.
My approach https://gitlab.com/bss03/type-aligned/-/blob/main/src/Type_aligned.idr?ref_type=heads#L94 erases the indexes/elements.
The definitions of `transitive` and `reflexive` from the stdlib also require relevant (but implicit) index arguments ... which means those stdlib interfaces don't really mesh well with my library.
But! It _is_ possible to implement versions of transitive that takes ERASED (and irrelevant) index arguments for both/all relations in the stdlib. That means keeping the indexes around at runtime is wasteful at least _sometimes_.
And! Some relations allow you to derive one or both indexes from the value. The stdlib LTE allows you to recover the first index (lesser number) from it's structure, so there's some sense that saving the index for that is redundant (or a premature optimization, at least).
It's clear the stdlib authors of those modules did know about erasure and chose to use it in some cases. Can anyone reveal reasoning behind those decisions, or point me to a set of guidelines for making my own decisions?
In any case, I need to figure out some way to test what I have, or start the re-write toward relevancy.


