Есть интерфейсы, у них есть имплементация. Имплементации бывают нужны какие-то специальные данные. Например, хендлер логгерной библиотеки можно туда положить. Это детали имплементации, так как они проистекают из нативных подсистем. Эти детали должны быть скрыты, и потому их хорошо и правильно помещать в рантайм, которым будут пользоваться только интерпретаторы. Это примерно то же самое, как и инкапсуляция в ООП. Ты не видишь, что за интерфейсом, но каждая конкретная имплементация может хранить свои данные, нужные только ей. Клиент, пользующийся интерфейсом про эти данные не знает и знать не может
То есть вам нужно прокидывать контекст, который требуется имплементациям тайпклассов? Мне кажется, в TF это тоже очень хорошо решено через ридер-монадку