--  TODO: if circ_refsave is on, find the refs that can be added to circ_refskip
runCircuitT :: Monad m => BuilderT g m a -> m (Circuit g, a)
runCircuitT b = do
    (a, st) <- runStateT b emptyBuild
    return (st^.bs_circ, a)
runCircuitT :: Monad m => BuilderT g m a -> m (Circuit g, a)
runCircuitT b = do
    (a, st) <- runStateT b emptyBuild
    return (st^.bs_circ, a)
runCircuitT b = do
    (a, st) <- runStateT b emptyBuild
    return (st^.bs_circ, a)