<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def argument_types(self) -> List[Type]: """ Gives the types of all arguments to this function. For functions returning a basic type, we grab all ``.first`` types until ``.second`` is no longer a ``ComplexType``. That logic is implemented here in the base class. If you have a higher-order function that returns a function itself, you need to override this method. """

        arguments = [self.first]
        remaining_type = self.second
        while isinstance(remaining_type, ComplexType):
            arguments.append(remaining_type.first)
            remaining_type = remaining_type.second
        return arguments