fullAdder2 :: Bits a => a -> a -> a -> (a, a)
fullAdder2 x y c_in = (s, c_out)
    where (s0, c0) = halfAdder x y;
          (s, c1) = halfAdder s0 c_in;
          c_out = c0 `xor` c1
fullAdder2 :: Bits a => a -> a -> a -> (a, a)
fullAdder2 x y c_in = (s, c_out)
    where (s0, c0) = halfAdder x y;
          (s, c1) = halfAdder s0 c_in;
          c_out = c0 `xor` c1
fullAdder2 x y c_in = (s, c_out)
    where (s0, c0) = halfAdder x y;
          (s, c1) = halfAdder s0 c_in;
          c_out = c0 `xor` c1