title: Map or flattenMap in ReactiveCocoa
body: <p>I'm new to ReactiveCocoa. How do I know when should I use map: or flattenMap: ? And How do I know whether it is a <em>stream-of-streams</em> or a regular stream? Here I got some code which I can't understand: </p>
  
  <pre><code>- (RACSignal *)signInSignal {
      return [RACSignal createSignal:^RACDisposable *(id&lt;RACSubscriber&gt; subscriber) {
          [self.signInService signInWithUsername:self.usernameTextField.text
                                        password:self.passwordTextField.text
                                        complete:^(BOOL success) {
                                            [subscriber sendNext:@(success)];
                                            [subscriber sendCompleted];
                                        }];
          return nil;
      }];
  }
  </code></pre>
  
  <p>This method return a stream-of-streams. But why? Can anyone explain it for me? Thanks!</p>