insertInput :: (Gate g, Monad m) => Ref -> InputId -> BuilderT g m ()
insertInput !ref !id = do
    bs_circ . circ_inputs . at (getInputId id) ?= ref
    insertGate ref (gateBase (Input id))
insertInput :: (Gate g, Monad m) => Ref -> InputId -> BuilderT g m ()
insertInput !ref !id = do
    bs_circ . circ_inputs . at (getInputId id) ?= ref
    insertGate ref (gateBase (Input id))
insertInput !ref !id = do
    bs_circ . circ_inputs . at (getInputId id) ?= ref
    insertGate ref (gateBase (Input id))