---------------------------------------- flip-flop model

data ThreeVal = U | L | H          -- undefined, low, high
     deriving Show

nand :: ThreeVal->ThreeVal->ThreeVal
nand H H = L
nand L _ = H
nand _ L = H
nand _ _ = U

nandSeq :: [ThreeVal]->[ThreeVal]->[ThreeVal]
nandSeq = zipWith nand


q, q', set, reset :: [ThreeVal]

q  = U : U : U : nandSeq set q'
q' = U : U : U : nandSeq reset q

set   = [L,L,L,L,L,L,L,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H]
reset = [H,H,H,H,H,H,H,H,H,H,H,H,H,H,L,L,L,L,L,L,L,H,H,H,H,H]

{-
Main> q
[U, U, U, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, L,
L, L, L, L, L, L, L, L]
Main> q'
[U, U, U, U, U, U, L, L, L, L, L, L, L, L, L, L, L, H, H, H, H,
H, H, H, H, H, H, H, H]
-}


