anchor.diff:      | "NOTICE" ->
           println "Failed to login"
           Halt
  -    | _ ->
  -        Continue (code,line)
  -
  -let processMessage (code,line:string) =
  +    | "MODE" ->
  +        let split = (line.Split ' ')
  +        let mode = split.[3].[0]
  +
  +        if mode = '+' then
  +            Result {state with mods = split.[4]::state.mods}
  +        else
  +            let newMods = state.mods |> List.filter (fun s -> s <> split.[4])
  +            Result {state with mods = newMods}
  +    | _ ->
  +        Continue (code,line,state)
  +
  +/// Processes messages that are printed. Ex: PRIVMSG, JOIN, PART.
  +let processNormal (code,line:string,state) =
       /// Returns the index of the first found character in the list, or the end of the string otherwise.
       let getIndexOrEnd (str:string) (list:string[]) =
           list
  
positive.code:         use writer = new StreamWriter(client.GetStream(), Encoding.UTF8)
  
          writer.NewLine <- "\r\n"
          Async.Start (processMessages reader writer)
  
          writer |> login username password
  
  
negative.code:     cprintf ConsoleColor.Magenta "%s " status
      printfn ""
  
  type PipeStatus<'a,'b> =
      | Continue of 'a
      | Result of 'b
      | Halt
  
  type State = {
      stream: StreamWriter;
      mods: string list;
  }
  
  /// Processes messages that indicate if a login was successful or not, along with channel moderators.
  let processImportant (code,line:string,state) =
      match code with
      | "004" ->
          println "Logged in"
  