anchor.diff:  
       open Fake
       open System
  -    open System.Reflection
  -    open Microsoft.FSharp.Reflection
  -
   
       // ************************************************************************
       // TYPES
  
positive.code:     // ************************************************************************
      // HELPER FUNCTIONS
  
      let private commandLine opts =     
          let recordValueAsString opts field = 
              if Reflection.FSharpValue.GetRecordField(opts, field) = null then ""
              else Reflection.FSharpValue.GetRecordField(opts, field).ToString()     
             
          Reflection.FSharpType.GetRecordFields(opts.GetType())
          |> Array.map (fun field -> field.Name, recordValueAsString opts field)
          |> Array.fold (fun s (o, v) -> 
              if isNullOrEmpty v then s
              else s + (sprintf " --%s=\"%s\"" (o.ToLower()) v)
          ) ""
  
      let private commandString command =       
          match command with
          | CreateRelease (releaseOpts, None) ->        
              releaseOpts |> commandLine |> (sprintf " create-release%s")
          | CreateRelease (releaseOpts, Some (deployOpts)) ->
              ((releaseOpts |> commandLine) + (deployOpts |> commandLine)) |> (sprintf " create-release%s")
          | DeployRelease opts ->
              opts |> commandLine |> (sprintf " deploy-release%s")
          | DeleteRelease opts ->
              opts |> commandLine |> (sprintf " delete-releases%s")
          | ListEnvironments -> 
              " list-environments"
  
  
negative.code:         let octoParams = setParams(octoParams)
          let command = (octoParams.Command.ToString())
          let tool = octoParams.ToolPath @@ octoParams.ToolName
          let args = commandLine octoParams.Command |>(+)<| serverCommandLine octoParams.Server
  
          traceStartTask "Octo " command       
          trace (tool + args)
  