     struct Show {
         let id: Int
         let name: String
+        var episodes: [Episode]? = []
+    }
+    
+    struct Episode {
+        let id: Int
+        let title: String
     }
     
     let key: String

            .flatMap(FlattenStrategy.Latest) { (payload) -> SignalProducer<Show, NSError> in
                return SignalProducer<Show, NSError> { sink, disposable in
                    payload["member"]["shows"].arrayValue.forEach({ showNode in
                        let show = Show(id: showNode["id"].intValue, name: showNode["title"].stringValue)
                        sink.sendNext(show)
                    })
                    sink.sendCompleted()
                }
            }
    }
    
    func sendRequestToPath(path: String, params: [String: String]?, method: String) -> SignalProducer<JSON, NSError> {

                .map({ (payload) -> String in
                    return payload["token"].stringValue
                })
                .flatMap(.Latest, transform: { (token) -> SignalProducer<(Show, [Episode]), NSError> in
                    self.token = token
                    return self.fetchShows().flatMap(FlattenStrategy.Merge, transform: { (show) -> SignalProducer<(Show, [Episode]), NSError> in
                        return zip(SignalProducer<Show, NSError>(value: show), self.fetchEpisodesFromShow(show).collect())
                    })
                })
                .startWithNext({ (tuple: (Show, [Episode])) -> () in
                    print("Show : \(tuple.0.name) (\(tuple.1.count) episodes)")
                })
        } catch {
            print("Got error while handling url \(url) : \(error)")
