<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def register_event_listener(coro):
 """ Registers a coroutine to receive lavalink event information. This coroutine will accept three arguments: :py:class:`Player`, :py:class:`LavalinkEvents`, and possibly an extra. The value of the extra depends on the value of the second argument. If the second argument is :py:attr:`LavalinkEvents.TRACK_END`, the extra will be a :py:class:`TrackEndReason`. If the second argument is :py:attr:`LavalinkEvents.TRACK_EXCEPTION`, the extra will be an error string. If the second argument is :py:attr:`LavalinkEvents.TRACK_STUCK`, the extra will be the threshold milliseconds that the track has been stuck for. If the second argument is :py:attr:`LavalinkEvents.TRACK_START`, the extra will be a :py:class:`Track` object. If the second argument is any other value, the third argument will not exist. Parameters coro A coroutine function that accepts the arguments listed above. Raises ------ TypeError If ``coro`` is not a coroutine. """

    if not asyncio.iscoroutinefunction(coro):
        raise TypeError("Function is not a coroutine.")

    if coro not in _event_listeners:
        _event_listeners.append(coro)