<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def define_new(cls, name, members, is_abstract=False):
 """ Define a new struct type derived from the current type. Parameters name: str Name of the struct type members: {member_name : type} Dictionary of struct member types. is_abstract: bool If set, marks the struct as abstract. """

        m = OrderedDict(cls._members)

        # Make sure derivation does not have any overlapping keys with its parent
        if set(m.keys()) & set(members.keys()):
            raise ValueError("'members' contains keys that overlap with parent")

        m.update(members)

        dct = {
            '_members' : m,
            '_is_abstract': is_abstract,
        }
        newcls = type(name, (cls,), dct)
        return newcls