我不知道我是如何实现它的,并且我假设可能没有办法实现它。是否有证据或令人信服的论据无法完成?
是什么让TIME IS NOW >>>>>>> 1.0
TIME IS NOW >>>>>>> 2.0
TIME IS NOW >>>>>>> 3.0
TIME IS NOW >>>>>>> 4.0
TIME IS NOW >>>>>>> 5.0
特别?
答案 0 :(得分: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
成为MonadFix
的原因。您无法将任意a
变为任意r
,反之亦然。