select ::(TRealm r, Typeable c) => 
         (Builder v g a (Value r Bool)) -- ^The 'Bool' condition
      -> (Builder v g a (Value r c))    -- ^The value chosen when the condition is 'True'
      -> (Builder v g a (Value r c))    -- ^The value chosen when the condition is 'False'
      -> (Builder v g a (Value r c))    -- ^The result
select builderB builder1 builder2 = do
  vb <- builderB
  v1 <- builder1
  v2 <- builder2
  nb <- valueToNode vb
  n1 <- valueToNode v1
  n2 <- valueToNode v2
  n0 <- addNodeE [nb, n1, n2] $ NInst (Arith A.Select) 
  n01 <- addNodeE [n0] $ NValue (toDyn v1) 
  let 
      r1 = Val.realm v1
      c1 = Val.content v1
  return $ FromNode r1 c1 n01
select ::(TRealm r, Typeable c) => 
         (Builder v g a (Value r Bool)) -- ^The 'Bool' condition
      -> (Builder v g a (Value r c))    -- ^The value chosen when the condition is 'True'
      -> (Builder v g a (Value r c))    -- ^The value chosen when the condition is 'False'
      -> (Builder v g a (Value r c))
select builderB builder1 builder2 = do
  vb <- builderB
  v1 <- builder1
  v2 <- builder2
  nb <- valueToNode vb
  n1 <- valueToNode v1
  n2 <- valueToNode v2
  n0 <- addNodeE [nb, n1, n2] $ NInst (Arith A.Select) 
  n01 <- addNodeE [n0] $ NValue (toDyn v1) 
  let 
      r1 = Val.realm v1
      c1 = Val.content v1
  return $ FromNode r1 c1 n01
select builderB builder1 builder2 = do
  vb <- builderB
  v1 <- builder1
  v2 <- builder2
  nb <- valueToNode vb
  n1 <- valueToNode v1
  n2 <- valueToNode v2
  n0 <- addNodeE [nb, n1, n2] $ NInst (Arith A.Select) 
  n01 <- addNodeE [n0] $ NValue (toDyn v1) 
  let 
      r1 = Val.realm v1
      c1 = Val.content v1
  return $ FromNode r1 c1 n01