'Construct a new ``Production``.
:param lhs: The left-hand side of the new ``Production``.
:type lhs: Nonterminal
:param rhs: The right-hand side of the new ``Production``.
:type rhs: sequence(Nonterminal and terminal)'

def __init__(self, lhs, rhs):

    if isinstance(rhs, string_types):
        raise TypeError(u'production    right    hand    side    should    be    a    list,    not    a    string')
    self._lhs = lhs
    self._rhs = tuple(rhs)
    self._hash = hash((self._lhs, self._rhs))
