考虑一些单子变压器堆栈,比如说
{-# 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
这显然行不通。我想有一些方法可以解决这样一个简单的问题,只是想不通。