module Verismith.Circuit.Base
( Gate(..)
, Circuit(..)
, CNode(..)
, CEdge(..)
)
where
import Data.Graph.Inductive (Gr, LEdge, LNode)
import System.Random
data Gate = And
| Or
| Xor
deriving (Show, Eq, Enum, Bounded, Ord)
newtype Circuit = Circuit { getCircuit :: Gr Gate () }
newtype CNode = CNode { getCNode :: LNode Gate }
newtype CEdge = CEdge { getCEdge :: LEdge () }
instance Random Gate where
randomR (a, b) g =
case randomR (fromEnum a, fromEnum b) g of
(x, g') -> (toEnum x, g')
random = randomR (minBound, maxBound)