def uniq_by(self, func: Callable[[T], Any]) -> 'TList[T]':
        """
        Usage:

            >>> TList([1, 2, 3, -2, -1]).uniq_by(lambda x: x**2)
            [1, 2, 3]
        """
        rs = TList()
        for e in self:
            if func(e) not in rs.map(func):
                rs.append(e)
        return rs