anchor.diff:                          match msg with
                           | Quit -> return ()
                           | NewData a ->
  -                            b <- Some (f a |> Async.RunSynchronously)
  -                            next.Post(NewData(async { return b.Value }))
  +                            b <- Some (f a)
  +                            next.Post(NewData(b.Value))
                               return! loop()
                           | Fetch(reply) ->
                               reply.Reply(b)
  
positive.code: 
  type Message<'a,'b> =
      | Quit
      | NewData of 'a Async
      | Fetch of 'b option AsyncReplyChannel
  type Agent<'a,'b> = Message<'a,'b> MailboxProcessor
  [<RequireQualifiedAccess>]
  module Agent =
      let map (f:'a Async -> 'b Async) (next:Agent<'b,'c>) =
          Agent.Start
              (fun inbox ->
                  let mutable b = None
  
negative.code:                 loop())
      let fetch (agent:Agent<_,_>) =
          agent.PostAndReply(Fetch)
  let output = Agent.make()
  let tokenizer = output |> Agent.map (fun s -> s |> Seq.map (fun x -> async { return Tokenizer.tokenize x }) |> Async.Parallel |> Async.RunSynchronously)
  let categorizer = tokenizer |> Agent.map LineCategorizer.categorize
  let commentStripper = categorizer |> Agent.map CommentStripper.stripComments
  let preprocessor = commentStripper |> Agent.map (fun (a,b,c:string seq) -> Preprocessor.preprocess Preprocessor.realFileResolver a b c)
  let start (f:FileInfo) =
      let directory = f.Directory.FullName |> Some
      let file = f.Name
      let lines = f.FullName |> File.ReadAllLines |> Seq.ofArray
      NewData(file,directory,lines) |> preprocessor.Post
  start (FileInfo(@"D:\NodeJs\TextOn.Atom\examples\example.texton"))
  output |> Agent.fetch |> Option.get
  
  