We have a large Polylith codebase at work – 150k lines of Clojure.
Where we have multiple implementations of a Polylith component, the interface nses are different in content: they have the same functions, with the same arguments etc, but the implementations are different – not all of them delegate to an impl ns function, some throw exceptions, some are implemented inline (remember: you don’t have to have a separate impl ns).
Multiple implementations are fairly rare. It isn’t like runtime polymorphism – it’s a “build-time” selection of the implementation, so it’s fairly specialized, IMO. We have about 200 bricks and the most components with multiple implementations was just 3 of those. Now we only have one component with multiple implementations (an i18n component that has one implementation based on our database and another implementation based on JSON files, intended as part of a small “preview” app our UI/UX guy can use when editing our Selmer HTML templates).