anchor.diff:  
       [<JsonProperty("Public_Url")>]
       PublicUrl : string
  -}
  +
  +    AppSize : int64
  +}
  +
  +/// HockeyAppVersion's success response
  +/// https://support.hockeyapp.net/kb/api/api-versions#create-version
  +type HockeyVersionResponse = {
  +    Title:  string
  +
  +    Timestamp : int64
  +
  +    Id : string
  +
  +    Version : string
  +
  +    ShortVersion : string
  +
  +    Status : int
  +
  +    [<JsonProperty("Config_Url")>]
  +    ConfigUrl : string
  +    
  +    [<JsonProperty("Public_Url")>]
  +    PublicUrl : string
  +}    
  +
  +type BaseHockeyAppParams = 
  +    /// (Required) API token
  +    abstract ApiToken: string
  +
  +    /// Set to your App Id (required for UWP apps targeting windows phone)
  +    abstract AppId: string
  +
  +    /// Set maximum upload delay
  +    abstract UploadTimeout: TimeSpan
  +    
  +/// The HockeyAppVersion parameter type
  +/// Based on https://support.hockeyapp.net/kb/api/api-versions#create-version
  +[<CLIMutable>]
  +type HockeyAppVersionParams = 
  +    { 
  +        /// (Required) API token
  +        ApiToken: string 
  +
  +        /// Set to your App Id (required for UWP apps targeting windows phone)
  +        AppId: string
  +
  +        /// Human readable version
  +        Version: string
  +
  +        /// Set maximum upload delay
  +        UploadTimeout: TimeSpan 
  +    }
  +    interface BaseHockeyAppParams with
  +        member this.ApiToken = this.ApiToken
  +        member this.AppId = this.AppId
  +        member this.UploadTimeout = this.UploadTimeout
   
   /// The HockeyApp parameter type
   /// Based on http://support.hockeyapp.net/kb/api/api-apps#upload-app
   [<CLIMutable>]
  -type HockeyAppUploadParams = {
  -    /// (Required) API token
  -    ApiToken: string
  -
  -    /// (Required) file data for the build (.ipa or .apk)
  -    File: string
  -
  -    /// file data for dsym (IOS: *.dysm.zip or Android: mapping.txt)
  -    Dsym: string
  -
  -    /// Release notes for the build
  -    Notes: string
  -
  -    /// Release notes type for the build
  -    NotesType: NoteType
  -
  -    /// Set the release type of the app
  -    ReleaseType: ReleaseType
  -
  -    /// Set the owner of the app
  -    OwnerId: string
  -
  -    /// Set the notify option
  -    Notify: NotifyOption
  -
  -    /// Set version as mandatory
  -    Mandatory: MandatoryOption
  -
  -    /// Set to true to enable the private download page (default is false)
  -    Private: bool
  -
  -    /// Set to the git commit sha for this build
  -    CommitSHA: string
  -
  -    /// Set to the URL of the build job on your build server
  -    BuildServerUrl: string
  -
  -    /// Set to your source repository
  -    RepositoryUrl: string
  -
  -    /// Release download status (can only be set with full-access tokens)
  -    DownloadStatus: DownloadStatusOption
  -
  -    /// Restrict download to specific teams
  -    Teams: string[]
  -
  -    /// Set maximum upload delay
  -    UploadTimeout: TimeSpan
  -
  -    /// Set to your App Id (required for UWP apps targeting windows phone)
  -    AppId: string
  -}
  -
  -/// The default HockeyApp parameters
  +type HockeyAppUploadParams = 
  +    {
  +        /// (Required) API token
  +        ApiToken: string
  +
  +        /// (Required) file data for the build (.ipa or .apk)
  +        File: string
  +
  +        /// file data for dsym (IOS: *.dysm.zip or Android: mapping.txt)
  +        Dsym: string
  +
  +        /// Release notes for the build
  +        Notes: string
  +
  +        /// Release notes type for the build
  +        NotesType: NoteType
  +
  +        /// Set the release type of the app
  +        ReleaseType: ReleaseType
  +
  +        /// Set the owner of the app
  +        OwnerId: string
  +
  +        /// Set the notify option
  +        Notify: NotifyOption
  +
  +        /// Set version as mandatory
  +        Mandatory: MandatoryOption
  +
  +        /// Set to true to enable the private download page (default is false)
  +        Private: bool
  +
  +        /// Set to the git commit sha for this build
  +        CommitSHA: string
  +
  +        /// Set to the URL of the build job on your build server
  +        BuildServerUrl: string
  +
  +        /// Set to your source repository
  +        RepositoryUrl: string
  +
  +        /// Release download status (can only be set with full-access tokens)
  +        DownloadStatus: DownloadStatusOption
  +
  +        /// Restrict download to specific teams
  +        Teams: string[]
  +
  +        /// Set maximum upload delay
  +        UploadTimeout: TimeSpan
  +
  +        /// Set to your App Id (required for UWP apps targeting windows phone)
  +        AppId: string
  +
  +        /// When uploading a build, specify to which version (hockeyapp version id)
  +        VersionId: string
  +    }
  +    interface BaseHockeyAppParams with
  +        member this.ApiToken: string = this.ApiToken
  +        member this.AppId: string = this.AppId
  +        member this.UploadTimeout = this.UploadTimeout
  +
  +/// The default HockeyApp parameters to upload a build
   let HockeyAppUploadDefaults = {
       ApiToken = String.Empty
       File = String.Empty
  
positive.code:     if not (String.IsNullOrEmpty param.CommitSHA) then yield sprintf "-F \"commit_sha=%s\"" param.CommitSHA
      if not (String.IsNullOrEmpty param.BuildServerUrl) then yield sprintf "-F \"build_server_url=%s\"" param.BuildServerUrl
      if not (String.IsNullOrEmpty param.RepositoryUrl) then yield sprintf "-F \"repository_url=%s\"" param.RepositoryUrl
      if not (String.IsNullOrEmpty param.AppId) 
      then 
          yield sprintf "https://rink.hockeyapp.net/api/2/apps/%s/app_versions/upload" param.AppId
      else
          yield "https://rink.hockeyapp.net/api/2/apps/upload"
  }
  
  /// Uploads an app to HockeyApp
  /// ## Parameters
  ///  - `setParams` - Function used to override the default parameters
  let HockeyApp (setParams: HockeyAppUploadParams -> HockeyAppUploadParams) =
      let p = HockeyAppUploadDefaults
              |> setParams
              |> validateParams
  
      p
      |> toCurlArgs
  
negative.code:     Teams = Array.empty
      UploadTimeout = TimeSpan.FromMinutes 2.
      AppId = String.Empty
      VersionId = String.Empty
  }
  
  /// The default HockeyAppVersion parameters to create a version
  let HockeyAppVersionDefaults = {
      ApiToken = String.Empty
      AppId = String.Empty
      Version = String.Empty
      UploadTimeout = TimeSpan.FromMinutes 2.
  }
  
  /// [omit]
  let private nl = Environment.NewLine
  
  /// [omit]
  let private validateParams param:HockeyAppUploadParams =
      if param.ApiToken = "" then failwith "You must provide your API token"
      if param.File = "" then failwith "You must provide an app file to upload"
      if not <| File.Exists param.File then
  