open Sexplib.Std

(*
Type for bits
==============

Zero | One

*)

type t      =
| One
| Zero
[@@deriving sexp]

let to_string = function
  | Zero -> "0"
  | One  -> "1"


let and_operator a b =
  match a, b with
  | Zero, _ -> Zero
  | _, Zero -> Zero
  | _, _ -> One


let or_operator a b =
  match a, b with
  | One, _ -> One
  | _, One -> One
  | _, _ -> Zero


let xor_operator a b =
  match a, b with
  | One, Zero -> One
  | Zero, One -> One
  | _, _ -> Zero


let not_operator = function
  | One -> Zero
  | Zero -> One