我已经创建了一个函数,它在它需要使用的 Monad 中是多态的,而不是依赖于这个 Monad 存在的类型类实例。它看起来像这样:
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
,嗯,效果。现在我假设,我所需要的只是使用一些 Monad Transformers 来“在世界尽头”(即在main()
)到达这个 Monad 星座。类似的东西ReaderT<ForIO, Dependency, Unit>
。
但是,我似乎无法创建合适的M
(或任何上下文)来调用此方法。如何在具有必要类型类实例的确切 monad 上调用此方法?