<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_effort_streams(self, effort_id, types=None, resolution=None, series_type=None):
 """ Returns an streams for an effort. http://strava.github.io/api/v3/streams/#effort Streams represent the raw data of the uploaded file. External applications may only access this information for activities owned by the authenticated athlete. Streams are available in 11 different types. If the stream is not available for a particular activity it will be left out of the request results. Streams types are: time, latlng, distance, altitude, velocity_smooth, heartrate, cadence, watts, temp, moving, grade_smooth http://strava.github.io/api/v3/streams/#effort :param effort_id: The ID of effort. :type effort_id: int :param types: (optional) A list of the the types of streams to fetch. :type types: list :param resolution: (optional, default is 'all') indicates desired number of data points. 'low' (100), 'medium' (1000), 'high' (10000) or 'all'. :type resolution: str :param series_type: (optional, default is 'distance'. Relevant only if using resolution either 'time' or 'distance'. Used to index the streams if the stream is being reduced. :type series_type: str :return: An dictionary of :class:`stravalib.model.Stream` from the effort. :rtype: :py:class:`dict` """


        # stream are comma seperated list
        if types is not None:
            types = ",".join(types)

        params = {}
        if resolution is not None:
            params["resolution"] = resolution

        if series_type is not None:
            params["series_type"] = series_type

        result_fetcher = functools.partial(self.protocol.get,
                                           '/segment_efforts/{id}/streams/{types}'.format(id=effort_id, types=types),
                                           **params)

        streams = BatchedResultsIterator(entity=model.Stream,
                                         bind_client=self,
                                         result_fetcher=result_fetcher)

        # Pack streams into dictionary
        return {i.type: i for i in streams}