let split_queued_exprs (qes: queued_expr list)
  : inner expr list * queued_expr list =
    let rec take_ready qes =
      begin match qes with
      | Known_expr(e) :: ps1 -> e :: take_ready ps1
      | _ -> []
      end
    in
    let rec drop_ready qes =
      begin match qes with
      | Known_expr(e) :: ps1 -> drop_ready ps1
      | _ -> qes
      end
    in
    (take_ready qes, drop_ready qes)