(在这一点上,这更像是一个我想知道如何解决的难题,而不是我希望在实践中使用的解决方案)
我正在尝试编写一个runDebug具有以下规范的函数:它的参数有类型IO (); 它的返回类型是(Monad m) => m (); 取决于它m,它表现为两种不同的方式之一; 如果MonadIO m,那么runDebug = liftIO,否则runDebug = const (return ()).
我试过的方法依赖于类型类
class MonadDebug m where
runDebug :: IO () -> m ()
Run Code Online (Sandbox Code Playgroud)
我尝试过使用MonadBase,我尝试过使用MonadIO重叠的实例,但是所有这些实例都遇到了歧义问题.
我想我可以通过为每个变换器编写实例来获得一些工作,但我一直希望避免这种情况.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |