5
A
回答
2
一般来说,您可以通过ContT r m
得到的唯一值是类型m r
。的Run (ContT r)
类型签名将是
Run (ContT r) = forall n b. Monad n => ContT r n b -> n (StT (ContT r) b)
这相当于
forall n b. ((b -> n r) -> n r) -> n (StT (ContT r) b)
唯一可能的类型为StT (ContT r) b
是r
,但即使这样,还有b -> n r
类型的没有可能的定义的函数传递到ContT
。并且由于liftWith
被赋予了一个需要Run (ContT r)
类型值的功能,因此无法实现。
restoreT
使情况更糟,因为可能从一般ContT r m a
中提取的任何值都不能转回ContT r m a
。所以你失去了来来往往。
顺便说一句,这也是您无法制作ContT
a MonadFix
的原因。您不能将任意a
转换为任意r
,反之亦然。
相关问题
- 1. 用于ProxyFast/ProxyCorrect的MonadTransControl实例
- 2. 为什么实例没有属性?
- 3. 为什么ImageView没有被实例化?
- 4. AccValidation为什么没有Monad实例?
- 5. 为什么SessionMap没有实例化?
- 6. MariaDB RDS实例“填满”没有什么
- 7. 为什么Shake没有为Action提供MonadMask实例?
- 8. 为什么我的实例没有名称
- 9. 为什么我的工厂没有被实例化/注入?
- 10. 为什么BroadcastReceiver在没有实例的情况下工作?
- 11. 为什么没有发现这个谓词的实例?
- 12. 为什么rails中的实例变量没有@符号?
- 13. 为什么CefSharp.WebBrowserExtensions.SetZoomLevel影响所有实例?
- 14. 为什么只有一个HTTPClient实例?
- 15. 为什么数组实例中没有内置Array方法?
- 16. Spring没有正确实例化一个对象。为什么?
- 17. 为什么没有功能显示实例?
- 18. 为什么实例方法没有按预期工作?
- 19. 为什么Conduit和Pipe没有Arrow实例?
- 20. 为什么这个实例变量没有递增?
- 21. 为什么python实例没有__name__属性?
- 22. 为什么这个HasField实例没有被解析?
- 23. 为什么JsArrayString没有实现迭代?
- 24. 为什么LinkedHashMap没有实现SortedMap?
- 25. 为什么AbstractAction没有实现actionPerformed()?
- 26. 为什么ArrayList没有实现队列?
- 27. WhereSelectArrayIterator为什么没有实现ICollection?
- 28. 为什么AbstractCollection没有实现equals()?
- 29. 为什么java.util.TreeMap.KeySet没有实现equals?
- 30. 为什么我的方法没有返回任何有效的SQL Server实例?
我认为这个评论[在'ContT'的定义](https://hackage.haskell.org/package/transformers-0.5.2.0/docs/Control-Monad-Trans-Cont.html#t:ContT )是相关的:“'ContT'不是单子类的函数,许多操作不能通过它来解除”。你甚至不需要'm'成为'Monad'就可以拥有'Monad(ContT k r m)'! – Alec
@Alec这绝对会让它变得很奇怪,但它不会将它与'MonadTransControl' –