考虑一个单子变换器堆栈,比如
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
...
newtype J = J { runJ :: ErrorT Foo (StateT Bar IO) a } deriving (Applicative, Functor, etc)
还有一些 J
中的函数:
peekNextQuux :: J Quux
peekNextQuux = ...
withJ :: J a -> IO (Either Foo a)
withJ = ...
然后我发现自己在J
上下文中。我可以编写:
f = withJ $ peekNextQuux >>= liftIO . print
现在我想在J
上下文中的单独线程中查看和打印quuxes
g = withJ . liftIO . forkIO . forever $ peekNextQuux >>= liftIO . print
显然这样不会起作用。我猜应该有一种方法可以解决这么简单的问题,只是想不出来。
lifted-base
。谢谢。 - Matvey Aksenov