It sounds to me like you're using classes to implement curried functions. In this case with the IO / DI context as the curried parameter.
Working in functional langs I just do DI with higher order functions.
Working in functional langs I just do DI with higher order functions.