Я создал функцию, которая полиморфна c в Монаде, которую он должен использовать, вместо этого она зависит от экземпляров классов типов, существующих для этой Монады. Это выглядит так:
fun <M> M.logic(...): Kind<M, String>
where M: MonadReader<M, Dependency>,
M: Effect<M> =
fx.monad() {
val dependency = ask().bind()
val response = effect { ...using dependency here... }.bind()
response
}
Я использую MonadReader
, чтобы получить зависимость, и я использую Effect
, ну, для эффектов. Теперь я предположил, что все, что мне нужно, это использовать несколько Трансформаторов Монад, чтобы добраться до этого созвездия Монады "в конце света" (то есть в main()
). Что-то вроде ReaderT<ForIO, Dependency, Unit>
.
Однако я не могу создать подходящий M
(или любой контекст) для вызова этого метода. Как я могу вызвать этот метод для точной монады, которая имеет необходимые экземпляры классов типов?