newPromise :: STM (PubFP e a, SubFP e a)
newPromise = do
    n <- newEmptyTMVar
    return (PubFP (void . tryPutTMVar n), SubFP (readTMVar n))
newPromise :: STM (PubFP e a, SubFP e a)
newPromise = do
    n <- newEmptyTMVar
    return (PubFP (void . tryPutTMVar n), SubFP (readTMVar n))
newPromise = do
    n <- newEmptyTMVar
    return (PubFP (void . tryPutTMVar n), SubFP (readTMVar n))