anchor.diff:      | Done of AsyncReplyChannel<unit>
       | Collect of AsyncReplyChannel<'a list>
   
  -///Assumptions: Message.End ends the processing.
  -///             Message.Done indicates the previous agents are done sending messages.
  -///             Message.Message is sent from one agent to the next.
  -///             Message.Collect is used to return results from the end of an agent's processing.
  +///An actor to process messages sequentially
   type Agent<'a>(messageLoop) =
       let mailbox =
           MailboxProcessor<Message<'a>>.Start(messageLoop)
  -    member this.Post msg = mailbox.Post msg
  -    member this.PostAndReply msg = mailbox.PostAndReply msg
  +    ///Tells this agent a message
  +    member this.Tell msg = mailbox.Post <| Message msg
  +    ///Kills this agent
  +    member this.Die() = mailbox.PostAndReply End
  +    ///Indicates the previous agent is done sending messages.
  +    member this.Done() = mailbox.PostAndReply Done
  +    ///Used to return results from the end of an agent's processing
  +    member this.Collect() = mailbox.PostAndReply Collect
       
       interface System.IDisposable with
           member this.Dispose() = 
  -            mailbox.PostAndReply End
  +            this.Die()
   
   ///A Pipe is a function that feeds all of its data to the next Agent in the Pipe.
   [<RequireQualifiedAccess>]
  
positive.code:                 match msg with
                  | Message(x) ->
                      let mappedItem = map x
                      nextAgent.Post (Message mappedItem)
                      return! messageLoop()
                  | End(replyChannel) ->
                      replyChannel.Reply()
                  | Done(replyChannel) ->
                      nextAgent.PostAndReply(Done)
                      replyChannel.Reply()
                      return! messageLoop()
                  | Collect(replyChannel) ->
  
negative.code:                 match msg with
                  | Message(x) ->
                      let! mappedItem = map x
                      nextAgent.Tell mappedItem
                      return! messageLoop()
                  | End(replyChannel) ->
                      replyChannel.Reply()
                  | Done(replyChannel) ->
                      nextAgent.Done()
                      replyChannel.Reply()
                      return! messageLoop()
                  | Collect(replyChannel) ->
  