mkOp2B :: (TRealm r, Typeable c) => 
          A.Operator                   -- ^The operation to be performed
       -> (Builder v g a (Value r c))    -- ^The first argument
       -> (Builder v g a (Value r c))    -- ^The second argument
       -> (Builder v g a (Value r Bool)) -- ^The result
mkOp2B op builder1 builder2 = do
  v1 <- builder1
  v2 <- builder2
  let 
      r1 = Val.realm v1
  n1 <- valueToNode v1
  n2 <- valueToNode v2
  n0 <- addNodeE [n1, n2] $ NInst (Arith op) 
  n01 <- addNodeE [n0]    $ NValue (toDyn v1){typeRep = typeOf True} 
  return $ FromNode r1 True n01
mkOp2B :: (TRealm r, Typeable c) => 
          A.Operator                   -- ^The operation to be performed
       -> (Builder v g a (Value r c))    -- ^The first argument
       -> (Builder v g a (Value r c))    -- ^The second argument
       -> (Builder v g a (Value r Bool))
mkOp2B op builder1 builder2 = do
  v1 <- builder1
  v2 <- builder2
  let 
      r1 = Val.realm v1
  n1 <- valueToNode v1
  n2 <- valueToNode v2
  n0 <- addNodeE [n1, n2] $ NInst (Arith op) 
  n01 <- addNodeE [n0]    $ NValue (toDyn v1){typeRep = typeOf True} 
  return $ FromNode r1 True n01
mkOp2B op builder1 builder2 = do
  v1 <- builder1
  v2 <- builder2
  let 
      r1 = Val.realm v1
  n1 <- valueToNode v1
  n2 <- valueToNode v2
  n0 <- addNodeE [n1, n2] $ NInst (Arith op) 
  n01 <- addNodeE [n0]    $ NValue (toDyn v1){typeRep = typeOf True} 
  return $ FromNode r1 True n01