anchor.diff:  type Command =
     | Process of string
   
  +type Worker =
  +  | Do of Command
  +
   type Manager =
  -  | Do of Command
  +  | Do of int * Command
     | Start
     | Stop
   
  -type JobManager =
  +type MetaManager =
     | Send of jobId : Guid * message : string
     | Stop of jobId : Guid
     | Start of jobId : Guid
  
positive.code: open Suave.Model.Binding
  open Suave.Http.ServerErrors
  open HttpFs.Client
  
  //helpers
  let guid guid = System.Guid.Parse(guid)
  
negative.code:   let stopWatch = System.Diagnostics.Stopwatch.StartNew()
    let request = createRequest Get <| Uri(uri)
    use response = getResponse request |> Async.RunSynchronously
    let responseTime = stopWatch.Elapsed.TotalMilliseconds
    printfn "%A" responseTime
  
  let newWorker manager : actor<Worker> =
    actor.Start(fun self ->
      let rec loop manager =
        async {
          let! msg = self.Receive ()
          match msg with
          | Worker.Do command ->
            match command with
            | Process uri -> doit uri
            return! loop manager
        }
      loop manager
    )
  
  let newManager () : actor<Manager> =
    actor.Start(fun self ->
      let rec loop status =
        async {
          let! msg = self.Receive ()
          match msg with
          | Manager.Do (count, command) ->
            match status with
            | Stopped ->
              printfn "Can't do work when the job is stopped"
              return! loop status
            | Running ->
              let workers = [ 1 .. count ] |> List.map (fun _ -> newWorker self)
              workers |> List.iter (fun worker -> worker.Post(Worker.Do(command)))
              return! loop status
          | Manager.Stop ->
            return! loop Stopped
  