return toks[0], '' if len(toks) == 1 else toks[1]
 
 
-class _CompletableStringsList:
+class _Completable(ABC):
+
+    @abstractmethod
+    def complete(self) -> None:
+        'Set .completed to "complete" value if possible of current state.'
+
+
+class _CompletableStringsList(_Completable):
 
     def __init__(self) -> None:
         self._incomplete: list[str] = []
         self._on_list('remove', value, complete)
 
     def complete(self) -> None:
-        'Declare list done.'
         self.completed = tuple(self._incomplete)
 
     def clear(self) -> None:
             return None
         if isinstance(self, _CompletableStringsList):
             return self.completed
-        if isinstance(self, _Topic):
+        if isinstance(self, _CompletableTopic):
             return Topic(*self.completed)
         for cls in [cls for cls in self.__class__.__mro__
                     if AutoAttrMixin not in cls.__mro__]:
         self._on_update()
 
 
-class _UpdatingCompletableStringsList(_UpdatingMixin, _CompletableStringsList):
+class _UpdatingCompletable(_UpdatingMixin, _Completable):
 
     def complete(self) -> None:
-        super().complete()
+        super().complete()  # type: ignore
         self._on_update()
 
 
+class _UpdatingCompletableStringsList(_UpdatingCompletable,
+                                      _CompletableStringsList):
+    pass
+
+
 @dataclass
 class IrcConnSetup:
     'All we need to know to set up a new Client connection.'
     who: Optional[NickUserHost] = None
 
 
-class _Topic:
+class _CompletableTopic(_Completable):
     _what: str = ''
     _who: Optional[NickUserHost] = None
 
         self._who = NickUserHost(copy.nick, copy.user, copy.host)
 
     def complete(self) -> None:
-        'Declare data collection finished, return full or empty content.'
         self.completed = (('', None) if self._who is None
                           else (self._what, self._who))
 
 
 class _Channel:
     user_ids: _CompletableStringsList
-    topic: _Topic
+    topic: _CompletableTopic
 
     def __init__(self,
                  get_id_for_nick: Callable,
     pass
 
 
-class _UpdatingTopic(_UpdatingMixin, _Topic):
-
-    def complete(self) -> None:
-        super().complete()
-        self._on_update()
+class _UpdatingTopic(_UpdatingCompletable, _CompletableTopic):
+    pass
 
 
 class _UpdatingChannel(_UpdatingMixin, _Channel):