{"action":"created","comment":{"url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/comments/38634748","id":38634748,"diff_hunk":"@@ -1,102 +1,161 @@\n-﻿module FtpTypeProviderImplementation\n-\n-open System\n-open System.Net\n-open System.IO\n-open System.Reflection\n-open ProviderImplementation.ProvidedTypes\n-open Microsoft.FSharp.Core.CompilerServices\n-\n-/// Get the directories and files in an FTP site using anonymous login\n-let getFtpDirectory (site:string, user:string, pwd:string) = \n-    let request = \n-        match WebRequest.Create(site) with \n-        | :? FtpWebRequest as f -> f\n-        | _ -> failwith (sprintf \"site '%s' did not result in an FTP request. Do you need to add prefix 'ftp://' ?\" site)\n-    request.Method <- WebRequestMethods.Ftp.ListDirectoryDetails\n-    request.Credentials <- NetworkCredential(user, pwd)\n-\n-    use response = request.GetResponse() :?> FtpWebResponse\n-    \n-    use responseStream = response.GetResponseStream()\n-    use reader = new StreamReader(responseStream)\n-    let contents = \n-        [ while not reader.EndOfStream do \n-             yield reader.ReadLine().Split([| ' ';'\\t' |],StringSplitOptions.RemoveEmptyEntries) ]\n-\n-    let dirs = \n-        [ for c in contents do \n-            if c.Length > 1 then \n-               if c.[0].StartsWith(\"d\") then yield Seq.last c ]\n-\n-    let files = \n-        [ for c in contents do \n-            if c.Length > 1 then \n-               if c.[0].StartsWith(\"-\") then yield Seq.last c ]\n-\n-    files, dirs\n-\n-// getFtpDirectory  \"ftp://ftp.ncbi.nlm.nih.gov/\"\n-\n-\n-[<TypeProvider>]\n-type FtpProviderImpl(config : TypeProviderConfig) as this =\n-    inherit TypeProviderForNamespaces ()\n-    let nameSpace = \"FSharp.Management\"\n-    let asm = Assembly.GetExecutingAssembly()\n-\n-    // Recursive, on-demand adding of types\n-    let createTypes (typeName, site, user, pwd) = \n-        let rec addTypes (site:string, td:ProvidedTypeDefinition) =\n-        \n-            td.AddMembersDelayed(fun () -> \n-                let files, dirs = getFtpDirectory (site, user, pwd)\n-\n-                [ for dir in dirs do \n-                    let nestedType = ProvidedTypeDefinition(dir, Some typeof<obj>)\n-                    addTypes(site + dir + \"/\", nestedType)\n-                    yield nestedType :> MemberInfo \n-\n-                  for file in files do \n-                    //let nestedType = ProvidedTypeDefinition(file, Some typeof<obj>)\n-                    let myProp = ProvidedLiteralField(\"Contents\", typeof<string>, site + file)\n-    (*\n-                                    GetterCode = (fun args -> \n-                                        <@@ let request = WebRequest.Create(site + file) :?> FtpWebRequest\n-                                            request.Method <- WebRequestMethods.Ftp.DownloadFile\n-                                            request.Credentials <- new NetworkCredential (\"anonymous\",\"janeDoe@contoso.com\");\n-                                            let response = request.GetResponse() :?> FtpWebResponse\n-                                            use responseStream = response.GetResponseStream()\n-                                            use reader = new StreamReader(responseStream)\n-                                            reader.ReadToEnd() @@>))\n-    *)\n-                    //nestedType.AddMember myProp \n-                    yield myProp :> MemberInfo ] )\n-        let actualType = ProvidedTypeDefinition(asm, nameSpace, typeName, Some typeof<obj>)\n-        addTypes(site, actualType)\n-        actualType\n-\n-    let _ = \n-        let topType = ProvidedTypeDefinition(asm, nameSpace, \"FtpProvider\", Some typeof<obj>)\n-        let siteParam = \n-           let p = ProvidedStaticParameter(\"Url\",typeof<string>) \n-           p.AddXmlDoc(\"The URL of the FTP site, including ftp://\")\n-           p\n-        let userParam = \n-           let p = ProvidedStaticParameter(\"User\",typeof<string>, \"anonymous\") \n-           p.AddXmlDoc(\"The user of the FTP site (default 'anonymous')\")\n-           p\n-        let pwdParam = \n-           let p = ProvidedStaticParameter(\"Password\",typeof<string>, \"janedoe@contoso.com\") \n-           p.AddXmlDoc(\"The password used to access the FTP site (default 'janedoe@contoso.com')\")\n-           p\n-        let staticParams = [ siteParam; userParam; pwdParam ]\n-        topType.DefineStaticParameters(staticParams, (fun typeName args -> \n-            let site = args.[0] :?> string\n-            let user = args.[1] :?> string\n-            let pwd = args.[2] :?> string\n-            createTypes(typeName, site, user, pwd)))\n-        this.AddNamespace(nameSpace, [topType])\n-\n-[<assembly:TypeProviderAssembly>]\n-do ()\n\\ No newline at end of file\n+﻿module FtpTypeProviderImplementation\r\n+\r\n+open System\r\n+open System.Net\r\n+open System.IO\r\n+open System.Reflection\r\n+open ProviderImplementation.ProvidedTypes\r\n+open Microsoft.FSharp.Core.CompilerServices\r\n+\r\n+/// Get the directories and files in an FTP site using anonymous login\r\n+let getFtpDirectory (site:string, user:string, pwd:string) = \r\n+    let request = \r\n+        match WebRequest.Create(site) with \r\n+        | :? FtpWebRequest as f -> f\r\n+        | _ -> failwith (sprintf \"site '%s' did not result in an FTP request. Do you need to add prefix 'ftp://' ?\" site)\r\n+    request.Method <- WebRequestMethods.Ftp.ListDirectoryDetails\r\n+    request.Credentials <- NetworkCredential(user, pwd)\r\n+\r\n+    use response = request.GetResponse() :?> FtpWebResponse\r\n+    \r\n+    use responseStream = response.GetResponseStream()\r\n+    use reader = new StreamReader(responseStream)\r\n+    let contents = \r\n+        [ while not reader.EndOfStream do \r\n+             yield reader.ReadLine().Split([| ' ';'\\t' |],StringSplitOptions.RemoveEmptyEntries) ]\r\n+\r\n+    let dirs = \r\n+        [ for c in contents do \r\n+            if c.Length > 1 then \r\n+               if c.[0].StartsWith(\"d\") then yield Seq.last c ]\r\n+\r\n+    let files = \r\n+        [ for c in contents do \r\n+            if c.Length > 1 then \r\n+               if c.[0].StartsWith(\"-\") then yield Seq.last c ]\r\n+\r\n+    files, dirs\r\n+\r\n+[<TypeProvider>]\r\n+type FtpProviderImpl(config : TypeProviderConfig) as this =\r\n+    inherit TypeProviderForNamespaces ()\r\n+    let nameSpace = \"FSharp.Management\"\r\n+    let asm = Assembly.GetExecutingAssembly()\r\n+\r\n+    // Recursive, on-demand adding of types\r\n+    let createTypes (typeName, site, user, pwd:string, useBinary:bool) = \r\n+        let rec addTypes (site:string, td:ProvidedTypeDefinition) =\r\n+\r\n+            td.AddMembersDelayed(fun () -> \r\n+                // TODO.6\r\n+                let files, dirs = getFtpDirectory (site, user, pwd)\r\n+                [\r\n+                    for dir in dirs do \r\n+                        let nestedType = ProvidedTypeDefinition(dir, Some typeof<obj>)\r\n+                        addTypes(site + dir + \"/\", nestedType)\r\n+                        yield nestedType :> MemberInfo \r\n+\r\n+                    for file in files do \r\n+\r\n+                        let nestedType = ProvidedTypeDefinition(file, Some typeof<obj>)\r\n+\r\n+                        let contentsProperty =                                   \r\n+                                ProvidedProperty(\"Contents\", typeof<obj>,\r\n+                                                   IsStatic=true,\r\n+                                                   GetterCode = \r\n+                                                        (fun args -> \r\n+                                                            <@@ \r\n+                                                                let request = WebRequest.Create(site + file) :?> FtpWebRequest\r\n+                                                    \r\n+                                                                request.Method <- WebRequestMethods.Ftp.DownloadFile\r\n+                                                                request.UseBinary <- useBinary\r\n+                                                                request.Credentials <- new NetworkCredential(user, pwd) \r\n+                                                                let response = request.GetResponse() :?> FtpWebResponse   // TODO.2 \r\n+                                                    \r\n+                                                                use responseStream = response.GetResponseStream()\r\n+                                                                use reader = new StreamReader(responseStream)\r\n+                                                    \r\n+                                                                let r = reader.ReadToEnd() :> obj\r\n+                                                                r\r\n+                                                                // TODO.\r\n+                                                                // TODO.3\r\n+\r\n+                                                              @@>))\r\n+                        nestedType.AddMember contentsProperty\r\n+\r\n+                        yield nestedType :> MemberInfo \r\n+                   ]\r\n+                   )\r\n+        let actualType = ProvidedTypeDefinition(asm, nameSpace, typeName, Some typeof<obj>)\r\n+        addTypes(site, actualType)\r\n+        actualType\r\n+\r\n+    let addProvidedStaticParameter nme typ xmldoc = \r\n+      let p = ProvidedStaticParameter(nme,typ) \r\n+      p.AddXmlDoc(sprintf xmldoc)\r\n+      p\r\n+\r\n+    let _ = \r\n+        let a = ProvidedTypeDefinition(asm, nameSpace, \"FtpProvider\", Some typeof<obj>)\r\n+        a.AddXmlDoc(\"An FTP Type Provider which lets you 'dot' into directory structures, and then retrieve a file by 'dotting' into the '.Contents' tag.  note: there are no progress updates, so if it's a large file over a slow connection, the only solution is to wait.  Perhaps try a smaller file first to verify.\")  // BUG.2 \r\n+\r\n+        let topType = ProvidedTypeDefinition(asm, nameSpace, \"FtpProvider\", Some typeof<obj>)\r\n+        let siteParam = \r\n+           let p = ProvidedStaticParameter(\"Url\",typeof<string>,\"\") \r\n+           p.AddXmlDoc(sprintf \"The URL of the FTP site, including ftp://\")\r\n+           p\r\n+        let userParam = \r\n+           let p = ProvidedStaticParameter(\"User\",typeof<string>, \"anonymous\") \r\n+           p.AddXmlDoc(\"The user of the FTP site (default 'anonymous')\")\r\n+           p\r\n+        let pwdParam = \r\n+           let p = ProvidedStaticParameter(\"Password\",typeof<string>, \"janedoe@contoso.com\") \r\n+           p.AddXmlDoc(\"The password used to access the FTP site (default 'janedoe@contoso.com')\")\r\n+           p\r\n+        let useBinary = \r\n+            let p = ProvidedStaticParameter(\"UseBinary\",typeof<bool>, true)\r\n+            p.AddXmlDoc(\"sets the data transfer data type to be binary (true) or ascii (false).  Binary mode gives a true, exact representation.  More often than not is the safer thing to use as this mode will handle both text and binary.  Use Ascii mode if you want to transfer text only, and you are happy to let FTP decide on appropriate line break characters translations, etc.\")\r\n+            p\r\n+        let staticParams = [ siteParam; userParam; pwdParam; useBinary ]\r\n+        topType.DefineStaticParameters(staticParams, (fun typeName args -> \r\n+            let site = args.[0] :?> string\r\n+            let user = args.[1] :?> string\r\n+            let pwd =  args.[2] :?> string\r\n+            let useBinary = args.[3] :?> bool\r\n+            createTypes(typeName, site, user, pwd, useBinary)))  // pass in top type details\r\n+        this.AddNamespace(nameSpace, [topType])\r\n+\r\n+[<assembly:TypeProviderAssembly>]\r\n+do ()\r\n+\r\n+// TODO\r\n+// ----\r\n+\r\n+// TODO.1: pick up FTP courtesy details from environment variables?\r\n+// TODO.2: add progress updates via intellisense?  ie. |          |  and |****  underneath for a text based left to right gauge\r\n+// TODO.3: return `notfound or exception on error\r\n+// TODO.6: add diag info to intellisense to cover command line + also IDE support (ie. so that it's transparent irrespective of usage style)\r\n+// TODO.8: include ways to get file sizes\r\n+\r\n+// BUG\r\n+// ---\r\n+// BUG.2: this text is not showing up in intellisense\r\n+\r\n+// DONE\r\n+// ----\r\n+// TODO.7: get back files in various formats such as text and binary.  Include means to be able to flick on / off all the important FTP switches\r\n+\r\n+// FIXED\r\n+// -----\r\n+// BUG.1: file identifiers are never defined.  Is this because of an error in the quotation?  Why?\r\n+\r\n+// RESOLVED\r","path":"FtpProvider/FtpProvider/FtpProvider.fs","position":255,"original_position":255,"commit_id":"3f9c40fa89dffc5bfac6af3ffd5d1053f8c50cfd","original_commit_id":"3f9c40fa89dffc5bfac6af3ffd5d1053f8c50cfd","user":{"login":"dsyme","id":7204669,"avatar_url":"https://avatars.githubusercontent.com/u/7204669?v=3","gravatar_id":"","url":"https://api.github.com/users/dsyme","html_url":"https://github.com/dsyme","followers_url":"https://api.github.com/users/dsyme/followers","following_url":"https://api.github.com/users/dsyme/following{/other_user}","gists_url":"https://api.github.com/users/dsyme/gists{/gist_id}","starred_url":"https://api.github.com/users/dsyme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dsyme/subscriptions","organizations_url":"https://api.github.com/users/dsyme/orgs","repos_url":"https://api.github.com/users/dsyme/repos","events_url":"https://api.github.com/users/dsyme/events{/privacy}","received_events_url":"https://api.github.com/users/dsyme/received_events","type":"User","site_admin":false},"body":"Remove these notes for resolved/fixed issues","created_at":"2015-09-03T11:17:15Z","updated_at":"2015-09-03T11:17:15Z","html_url":"https://github.com/dsyme/FtpTypeProviderExample/pull/5#discussion_r38634748","pull_request_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/5","_links":{"self":{"href":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/comments/38634748"},"html":{"href":"https://github.com/dsyme/FtpTypeProviderExample/pull/5#discussion_r38634748"},"pull_request":{"href":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/5"}}},"pull_request":{"url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/5","id":43594733,"html_url":"https://github.com/dsyme/FtpTypeProviderExample/pull/5","diff_url":"https://github.com/dsyme/FtpTypeProviderExample/pull/5.diff","patch_url":"https://github.com/dsyme/FtpTypeProviderExample/pull/5.patch","issue_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/issues/5","number":5,"state":"open","locked":false,"title":"FTP working + added binary mode + removed preliminary projects","user":{"login":"sgtz","id":1892697,"avatar_url":"https://avatars.githubusercontent.com/u/1892697?v=3","gravatar_id":"","url":"https://api.github.com/users/sgtz","html_url":"https://github.com/sgtz","followers_url":"https://api.github.com/users/sgtz/followers","following_url":"https://api.github.com/users/sgtz/following{/other_user}","gists_url":"https://api.github.com/users/sgtz/gists{/gist_id}","starred_url":"https://api.github.com/users/sgtz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sgtz/subscriptions","organizations_url":"https://api.github.com/users/sgtz/orgs","repos_url":"https://api.github.com/users/sgtz/repos","events_url":"https://api.github.com/users/sgtz/events{/privacy}","received_events_url":"https://api.github.com/users/sgtz/received_events","type":"User","site_admin":false},"body":"added use binary mode param and defaulted to this\r\nadded various intellisense comments\r\nremoved diagnostic -> stdout lines used for debugging\r\ntidied up a few things\r\n\r\nNot sure if it's okay to remove the preliminary projects... I was getting this cleaned up for FSharp.Management","created_at":"2015-08-28T05:25:55Z","updated_at":"2015-09-03T11:17:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"93c04c7c0f62c7b9a9812e4db910c530a4c0b0a3","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/5/commits","review_comments_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/5/comments","review_comment_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/issues/5/comments","statuses_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/statuses/3f9c40fa89dffc5bfac6af3ffd5d1053f8c50cfd","head":{"label":"sgtz:master","ref":"master","sha":"3f9c40fa89dffc5bfac6af3ffd5d1053f8c50cfd","user":{"login":"sgtz","id":1892697,"avatar_url":"https://avatars.githubusercontent.com/u/1892697?v=3","gravatar_id":"","url":"https://api.github.com/users/sgtz","html_url":"https://github.com/sgtz","followers_url":"https://api.github.com/users/sgtz/followers","following_url":"https://api.github.com/users/sgtz/following{/other_user}","gists_url":"https://api.github.com/users/sgtz/gists{/gist_id}","starred_url":"https://api.github.com/users/sgtz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sgtz/subscriptions","organizations_url":"https://api.github.com/users/sgtz/orgs","repos_url":"https://api.github.com/users/sgtz/repos","events_url":"https://api.github.com/users/sgtz/events{/privacy}","received_events_url":"https://api.github.com/users/sgtz/received_events","type":"User","site_admin":false},"repo":{"id":40954788,"name":"FtpTypeProviderExample","full_name":"sgtz/FtpTypeProviderExample","owner":{"login":"sgtz","id":1892697,"avatar_url":"https://avatars.githubusercontent.com/u/1892697?v=3","gravatar_id":"","url":"https://api.github.com/users/sgtz","html_url":"https://github.com/sgtz","followers_url":"https://api.github.com/users/sgtz/followers","following_url":"https://api.github.com/users/sgtz/following{/other_user}","gists_url":"https://api.github.com/users/sgtz/gists{/gist_id}","starred_url":"https://api.github.com/users/sgtz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sgtz/subscriptions","organizations_url":"https://api.github.com/users/sgtz/orgs","repos_url":"https://api.github.com/users/sgtz/repos","events_url":"https://api.github.com/users/sgtz/events{/privacy}","received_events_url":"https://api.github.com/users/sgtz/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sgtz/FtpTypeProviderExample","description":"Creating a type provider","fork":true,"url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample","forks_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/forks","keys_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/teams","hooks_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/hooks","issue_events_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/issues/events{/number}","events_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/events","assignees_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/assignees{/user}","branches_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/branches{/branch}","tags_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/tags","blobs_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/git/refs{/sha}","trees_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/statuses/{sha}","languages_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/languages","stargazers_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/stargazers","contributors_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/contributors","subscribers_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/subscribers","subscription_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/subscription","commits_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/commits{/sha}","git_commits_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/git/commits{/sha}","comments_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/comments{/number}","issue_comment_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/issues/comments{/number}","contents_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/contents/{+path}","compare_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/merges","archive_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/downloads","issues_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/issues{/number}","pulls_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/pulls{/number}","milestones_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/milestones{/number}","notifications_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/labels{/name}","releases_url":"https://api.github.com/repos/sgtz/FtpTypeProviderExample/releases{/id}","created_at":"2015-08-18T06:26:45Z","updated_at":"2015-08-18T06:26:45Z","pushed_at":"2015-08-28T20:36:12Z","git_url":"git://github.com/sgtz/FtpTypeProviderExample.git","ssh_url":"git@github.com:sgtz/FtpTypeProviderExample.git","clone_url":"https://github.com/sgtz/FtpTypeProviderExample.git","svn_url":"https://github.com/sgtz/FtpTypeProviderExample","homepage":null,"size":134,"stargazers_count":0,"watchers_count":0,"language":"F#","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dsyme:master","ref":"master","sha":"eb29f5e62f4b1adf0fe973c301a64d2ceb2613c4","user":{"login":"dsyme","id":7204669,"avatar_url":"https://avatars.githubusercontent.com/u/7204669?v=3","gravatar_id":"","url":"https://api.github.com/users/dsyme","html_url":"https://github.com/dsyme","followers_url":"https://api.github.com/users/dsyme/followers","following_url":"https://api.github.com/users/dsyme/following{/other_user}","gists_url":"https://api.github.com/users/dsyme/gists{/gist_id}","starred_url":"https://api.github.com/users/dsyme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dsyme/subscriptions","organizations_url":"https://api.github.com/users/dsyme/orgs","repos_url":"https://api.github.com/users/dsyme/repos","events_url":"https://api.github.com/users/dsyme/events{/privacy}","received_events_url":"https://api.github.com/users/dsyme/received_events","type":"User","site_admin":false},"repo":{"id":39392436,"name":"FtpTypeProviderExample","full_name":"dsyme/FtpTypeProviderExample","owner":{"login":"dsyme","id":7204669,"avatar_url":"https://avatars.githubusercontent.com/u/7204669?v=3","gravatar_id":"","url":"https://api.github.com/users/dsyme","html_url":"https://github.com/dsyme","followers_url":"https://api.github.com/users/dsyme/followers","following_url":"https://api.github.com/users/dsyme/following{/other_user}","gists_url":"https://api.github.com/users/dsyme/gists{/gist_id}","starred_url":"https://api.github.com/users/dsyme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dsyme/subscriptions","organizations_url":"https://api.github.com/users/dsyme/orgs","repos_url":"https://api.github.com/users/dsyme/repos","events_url":"https://api.github.com/users/dsyme/events{/privacy}","received_events_url":"https://api.github.com/users/dsyme/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dsyme/FtpTypeProviderExample","description":"Creating a type provider","fork":false,"url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample","forks_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/forks","keys_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/teams","hooks_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/hooks","issue_events_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/issues/events{/number}","events_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/events","assignees_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/assignees{/user}","branches_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/branches{/branch}","tags_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/tags","blobs_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/git/refs{/sha}","trees_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/statuses/{sha}","languages_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/languages","stargazers_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/stargazers","contributors_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/contributors","subscribers_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/subscribers","subscription_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/subscription","commits_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/commits{/sha}","git_commits_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/git/commits{/sha}","comments_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/comments{/number}","issue_comment_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/issues/comments{/number}","contents_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/contents/{+path}","compare_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/merges","archive_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/downloads","issues_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/issues{/number}","pulls_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls{/number}","milestones_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/milestones{/number}","notifications_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/labels{/name}","releases_url":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/releases{/id}","created_at":"2015-07-20T15:36:46Z","updated_at":"2015-07-28T11:03:47Z","pushed_at":"2015-08-28T20:36:12Z","git_url":"git://github.com/dsyme/FtpTypeProviderExample.git","ssh_url":"git@github.com:dsyme/FtpTypeProviderExample.git","clone_url":"https://github.com/dsyme/FtpTypeProviderExample.git","svn_url":"https://github.com/dsyme/FtpTypeProviderExample","homepage":null,"size":333,"stargazers_count":5,"watchers_count":5,"language":"F#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/5"},"html":{"href":"https://github.com/dsyme/FtpTypeProviderExample/pull/5"},"issue":{"href":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/issues/5"},"comments":{"href":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/issues/5/comments"},"review_comments":{"href":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/5/comments"},"review_comment":{"href":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/pulls/5/commits"},"statuses":{"href":"https://api.github.com/repos/dsyme/FtpTypeProviderExample/statuses/3f9c40fa89dffc5bfac6af3ffd5d1053f8c50cfd"}}}}