-- | TODO: Comment
computeNFA :: [a] -> NFA a -> Bool
computeNFA ys y = computeNFA' ys [runNFAStartState . runNFA $ y]
  where computeNFA' [] cs = flip any cs $ \s -> case s of
          (NFAState _) -> False
          (NFAEndState _) -> True
        computeNFA' (x:xs) !cs = computeNFA' xs $ nextNFAStates x cs

-- | TODO: Comment
computeNFA :: [a] -> NFA a -> Bool
computeNFA ys y = computeNFA' ys [runNFAStartState . runNFA $ y]
  where computeNFA' [] cs = flip any cs $ \s -> case s of
          (NFAState _) -> False
          (NFAEndState _) -> True
        computeNFA' (x:xs) !cs = computeNFA' xs $ nextNFAStates x cs

-- | TODO: Comment
computeNFA ys y = computeNFA' ys [runNFAStartState . runNFA $ y]
  where computeNFA' [] cs = flip any cs $ \s -> case s of
          (NFAState _) -> False
          (NFAEndState _) -> True
        computeNFA' (x:xs) !cs = computeNFA' xs $ nextNFAStates x cs

-- | TODO: Comment