-- | Lift states q and labels in an NBA
--   to pair of states ([q], []) and pair of labels ([l], [])
liftStateToPair :: (Ord q, Ord a) => NBA q a l -> NBA (PowerPair q) a ([l], [l])
liftStateToPair a = let liftToPair q = ([q], []) in
  a{ states = S.map liftToPair (states a)
   , bimap = B.map liftToPair (bimap a)
   , graph = nmap (\l -> ([l], [])) (graph a)
   , start = S.map liftToPair (start a)
   , accept = S.map liftToPair (accept a)
   }
liftStateToPair :: (Ord q, Ord a) => NBA q a l -> NBA (PowerPair q) a ([l], [l])
liftStateToPair a = let liftToPair q = ([q], []) in
  a{ states = S.map liftToPair (states a)
   , bimap = B.map liftToPair (bimap a)
   , graph = nmap (\l -> ([l], [])) (graph a)
   , start = S.map liftToPair (start a)
   , accept = S.map liftToPair (accept a)
   }
liftStateToPair a = let liftToPair q = ([q], []) in
  a{ states = S.map liftToPair (states a)
   , bimap = B.map liftToPair (bimap a)
   , graph = nmap (\l -> ([l], [])) (graph a)
   , start = S.map liftToPair (start a)
   , accept = S.map liftToPair (accept a)
   }