{"action":"created","comment":{"url":"https://api.github.com/repos/javaslang/javaslang/pulls/comments/72904554","id":72904554,"diff_hunk":"@@ -1387,23 +1414,376 @@ public String toString() {\n         return mkString(stringPrefix() + \"(\", \", \", \")\");\n     }\n \n-    private static <T> Vector<T> wrap(HashArrayMappedTrie<Integer, T> trie) {\n-        return trie.isEmpty() ? empty() : new Vector<>(trie);\n+    enum Helper {\n+        ;\n+        static <T> VectorTree<T> build(Object[] array, int offset, int length, int depth) {\n+            assert (array != null) && (offset >= 0) && (length >= 0);\n+            if (array.length == 0) {\n+                return emptyTree();\n+            } else if (depth == 1) {\n+                return new Vector1<>((T[]) array);\n+            } else {\n+                return new VectorN<>(array, offset, length, depth);\n+            }\n+        }\n+\n+        static <T> T[] getLeaf(Object[] root, int depth, int index) {\n+            assert (depth >= 2) && (index >= 0);\n+\n+            int shift = shiftValue(depth);\n+            Object[] array = (Object[]) root[index >> shift]; // doesn't need masking\n+\n+            while (shift > BRANCHING_BASE) {\n+                shift -= BRANCHING_BASE;\n+                array = (Object[]) array[(index >> shift) & branchingMask()]; // TODO mask and shift should be hidden in a proper method, e.g. nth\n+            }\n+\n+            assert array != null;\n+            return (T[]) array;\n+        }\n+\n+        static int shiftValue(int depth)   { return (depth - 1) * BRANCHING_BASE; }\n+        static int fullTreeSize(int depth) { return branchingFactor() * fullBranchSize(depth); }\n+\n+        /* branchingFactor()^(depth-1) == 2^(BRANCHING_BASE*depth) */\n+        static int fullBranchSize(int depth) {\n+            final int result = 1 << (BRANCHING_BASE * (depth - 1));\n+            assert result == (int) Math.pow(branchingFactor(), (depth - 1));\n+            return result;\n+        }\n     }\n-}\n \n-interface VectorModule {\n+    static final class Leaf<T> implements Serializable { // TODO separate start/end?\n+        private static final long serialVersionUID = 1L;\n+        private static final Leaf<?> EMPTY = new Leaf<>(emptyArray(), (byte) 0);\n \n-    final class Combinations {\n+        private final T[] array;\n+        private final byte length;\n \n-        static <T> Vector<Vector<T>> apply(Vector<T> elements, int k) {\n-            if (k == 0) {\n-                return Vector.of(Vector.empty());\n+        static <T> Leaf<T> empty()                         { return (Leaf<T>) EMPTY; }\n+        public static <T> Leaf<T> of(T[] leaf)             { return of(leaf, leaf.length); }\n+        public static <T> Leaf<T> of(T[] leaf, int length) { return new Leaf<T>(leaf, (byte) length); }\n+\n+        private Leaf(T[] array, byte length) {","path":"javaslang/src/main/java/javaslang/collection/Vector.java","position":1403,"original_position":1403,"commit_id":"f6dcdcd5a62e4de9317741868c161440ce2c9c32","original_commit_id":"f6dcdcd5a62e4de9317741868c161440ce2c9c32","user":{"login":"zsolt-donca","id":6824167,"avatar_url":"https://avatars.githubusercontent.com/u/6824167?v=3","gravatar_id":"","url":"https://api.github.com/users/zsolt-donca","html_url":"https://github.com/zsolt-donca","followers_url":"https://api.github.com/users/zsolt-donca/followers","following_url":"https://api.github.com/users/zsolt-donca/following{/other_user}","gists_url":"https://api.github.com/users/zsolt-donca/gists{/gist_id}","starred_url":"https://api.github.com/users/zsolt-donca/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zsolt-donca/subscriptions","organizations_url":"https://api.github.com/users/zsolt-donca/orgs","repos_url":"https://api.github.com/users/zsolt-donca/repos","events_url":"https://api.github.com/users/zsolt-donca/events{/privacy}","received_events_url":"https://api.github.com/users/zsolt-donca/received_events","type":"User","site_admin":false},"body":"Why is the array's length different than the leaf's length ?","created_at":"2016-07-31T13:54:48Z","updated_at":"2016-07-31T13:54:48Z","html_url":"https://github.com/javaslang/javaslang/pull/1449#discussion_r72904554","pull_request_url":"https://api.github.com/repos/javaslang/javaslang/pulls/1449","_links":{"self":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/comments/72904554"},"html":{"href":"https://github.com/javaslang/javaslang/pull/1449#discussion_r72904554"},"pull_request":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/1449"}}},"pull_request":{"url":"https://api.github.com/repos/javaslang/javaslang/pulls/1449","id":77723085,"html_url":"https://github.com/javaslang/javaslang/pull/1449","diff_url":"https://github.com/javaslang/javaslang/pull/1449.diff","patch_url":"https://github.com/javaslang/javaslang/pull/1449.patch","issue_url":"https://api.github.com/repos/javaslang/javaslang/issues/1449","number":1449,"state":"open","locked":false,"title":"Reimplemented `Vector` as bit-mapped vector trie","user":{"login":"paplorinc","id":1841944,"avatar_url":"https://avatars.githubusercontent.com/u/1841944?v=3","gravatar_id":"","url":"https://api.github.com/users/paplorinc","html_url":"https://github.com/paplorinc","followers_url":"https://api.github.com/users/paplorinc/followers","following_url":"https://api.github.com/users/paplorinc/following{/other_user}","gists_url":"https://api.github.com/users/paplorinc/gists{/gist_id}","starred_url":"https://api.github.com/users/paplorinc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paplorinc/subscriptions","organizations_url":"https://api.github.com/users/paplorinc/orgs","repos_url":"https://api.github.com/users/paplorinc/repos","events_url":"https://api.github.com/users/paplorinc/events{/privacy}","received_events_url":"https://api.github.com/users/paplorinc/received_events","type":"User","site_admin":false},"body":"Fixes https://github.com/javaslang/javaslang/issues/568.\r\n\r\nVector is the default Seq implementation that provides effectively constant time access to any element.\r\n Many other operations (e.g. `tail`, `drop`, `slice`) are also effectively constant.\r\n\r\nIt's implemented using a `bit-mapped vector trie`, i.e. a tree where each node has 32 children.\r\nFor integers this means that the tree's depth will be ≤ 6.\r\n\r\nFor symmetrically fast beginning and end operations (e.g. `drop` vs `dropRight`) two small arrays are used as depthless staging areas.\r\n\r\nThe first and last arrays have dynamic lengths (are shifted to the correct index on drop), but the middle one has internal offset to avoid shifting.\r\n\r\nThe first one is only empty if everything is empty; if the last is empty, so is the middle.\r\n\r\nThe first and last have a max size equal to the branching factor.\r\n\r\nThe middle only contains full blocks - padded via the offset.\r\n\r\n---\r\n\r\nIt's not based on [Clojure](https://github.com/paplorinc/clojure/blob/master/src/jvm/clojure/lang/PersistentVector.java) or [Scala](https://github.com/paplorinc/scala/blob/2.12.x/src/library/scala/collection/immutable/Vector.scala), but it has the same underlying idea: logarithmic access using a very wide and shallow tree, with a high branching factor.\r\n\r\nThis implementation is optimized algorithmically - though small wins are probably still lurking around :).\r\n\r\nCompared to the old implementation, it's usually a lot faster and uses a *lot* less memory:\r\nMemory - almost `70x` less memory overhead for large enough datasets:\r\n```\r\nfor 32768 elements\r\n `javaslang.collection.OldVector` uses `1.9 MB` (`1.3 MB` overhead, `41.4` bytes overhead per element)\r\n `javaslang.collection.Vector` uses `659 KB` (`20.7 KB` overhead, `0.6` bytes overhead per element)\r\n\r\nfor 1024 elements\r\n `javaslang.collection.OldVector` uses `58.8 KB` (`40.1 KB` overhead, `40.1` bytes overhead per element)\r\n `javaslang.collection.Vector` uses `19.3 KB` (`712 bytes` overhead, `0.7` bytes overhead per element)\r\n\r\nfor 32 elements\r\n `javaslang.collection.OldVector` uses `1.6 KB` (`1.1 KB` overhead, `35.2` bytes overhead per element)\r\n` javaslang.collection.Vector` uses `584 bytes` (`80 bytes` overhead, `2.5` bytes overhead per element)\r\n```\r\n\r\nSpeed - the new impl is `~3-4x` faster on average:\r\n```groovy\r\nRatios slang / <alternative_impl>\r\nOperation Ratio                                      32      1024       32768 \r\nCreate    slang_persistent/old_slang_persistent  46.61×    44.84×      63.56×\r\nHead      slang_persistent/old_slang_persistent   2.07×     2.74×       3.51×\r\nTail      slang_persistent/old_slang_persistent   2.73×     2.99×       4.69×\r\nGet       slang_persistent/old_slang_persistent   3.24×     6.17×       2.85×\r\nUpdate    slang_persistent/old_slang_persistent   1.08×     1.49×       2.29×\r\nPrepend   slang_persistent/old_slang_persistent   1.98×     2.41×       3.58×\r\nAppend    slang_persistent/old_slang_persistent   1.21×     1.51×       2.39×\r\nGroupBy   slang_persistent/old_slang_persistent   1.20×     2.59×       3.91×\r\nSlice     slang_persistent/old_slang_persistent  28.31×  1577.34×  103552.82×\r\nIterate   slang_persistent/old_slang_persistent   8.34×     5.39×       7.98×\r\n```\r\n\r\nCompared to `Java`'s mutable `ArrayList`, and `Scala`'s, `Clojure`'s, `Functional Java`'s and `Pcollections`'s persistent ones, these are the results (e.g. `2x` means that our implementation is `2` times faster - can be executed twice while the other only once - for the given number of elements):\r\n\r\n```groovy\r\nRatios slang / <alternative_impl>\r\nOperation Ratio                                           32     1024    32768 \r\nCreate    slang_persistent/java_mutable                0.70×    0.32×    0.40×\r\nCreate    slang_persistent/fjava_persistent          182.75×  142.47×  128.62×\r\nCreate    slang_persistent/pcollections_persistent   100.62×  157.50×  254.46×\r\nCreate    slang_persistent/clojure_persistent          0.75×    9.89×    8.96×\r\nCreate    slang_persistent/scala_persistent           12.23×    6.42×    4.56×\r\n\r\nHead      slang_persistent/java_mutable                0.55×    0.58×    0.59×\r\nHead      slang_persistent/fjava_persistent            0.65×    0.68×    0.69×\r\nHead      slang_persistent/pcollections_persistent     1.74×    4.14×    6.42×\r\nHead      slang_persistent/clojure_persistent          0.60×    0.95×    1.32×\r\nHead      slang_persistent/scala_persistent            0.67×    0.69×    0.70×\r\n\r\nTail      slang_persistent/java_mutable                0.51×    0.32×    0.25×\r\nTail      slang_persistent/fjava_persistent           38.89×   27.01×   29.39×\r\nTail      slang_persistent/pcollections_persistent     4.56×    5.15×    7.53×\r\nTail      slang_persistent/scala_persistent            2.35×    2.86×    3.71×\r\n\r\nGet       slang_persistent/java_mutable                0.78×    0.36×    0.21×\r\nGet       slang_persistent/fjava_persistent           53.22×   88.07×   45.27×\r\nGet       slang_persistent/pcollections_persistent     7.76×   12.35×   10.48×\r\nGet       slang_persistent/clojure_persistent          0.89×    1.17×    0.82×\r\nGet       slang_persistent/scala_persistent            1.13×    0.93×    0.56×\r\n\r\nUpdate    slang_persistent/java_mutable                0.09×    0.05×    0.03×\r\nUpdate    slang_persistent/fjava_persistent          111.29×  225.37×  233.17×\r\nUpdate    slang_persistent/pcollections_persistent     2.12×    3.75×    5.34×\r\nUpdate    slang_persistent/clojure_persistent          0.79×    1.14×    1.17×\r\nUpdate    slang_persistent/scala_persistent            0.92×    0.95×    1.21×\r\n\r\nPrepend   slang_persistent/java_mutable                1.40×    2.78×   70.52×\r\nPrepend   slang_persistent/fjava_persistent            7.10×    8.01×    6.21×\r\nPrepend   slang_persistent/pcollections_persistent     4.32×   10.32×   17.17×\r\nPrepend   slang_persistent/scala_persistent            1.05×    0.92×    0.93×\r\n\r\nAppend    slang_persistent/java_mutable                0.24×    0.17×    0.11×\r\nAppend    slang_persistent/fjava_persistent            4.53×    4.62×    4.07×\r\nAppend    slang_persistent/pcollections_persistent     2.35×    5.14×    8.52×\r\nAppend    slang_persistent/clojure_persistent          0.89×    0.69×    0.71×\r\nAppend    slang_persistent/scala_persistent            0.71×    0.62×    0.62×\r\n\r\nGroupBy   slang_persistent/java_mutable                0.26×    0.52×    0.69×\r\nGroupBy   slang_persistent/scala_persistent            0.96×    0.75×    0.81×\r\n\r\nSlice     slang_persistent/java_mutable                0.26×    0.29×    0.27×\r\nSlice     slang_persistent/clojure_persistent          0.26×    0.26×    0.25×\r\nSlice     slang_persistent/scala_persistent            1.10×    3.27×    5.03×\r\n\r\nIterate   slang_persistent/java_mutable                0.91×    0.29×    0.36×\r\nIterate   slang_persistent/fjava_persistent          388.00×  257.66×  269.15×\r\nIterate   slang_persistent/pcollections_persistent    15.87×    6.77×    9.05×\r\nIterate   slang_persistent/clojure_persistent          0.88×    0.67×    1.04×\r\nIterate   slang_persistent/scala_persistent            1.88×    0.95×    0.86×\r\n```\r\n\r\nand memory usages:\r\n```groovy\r\nfor 32768 elements\r\n `java.util.ArrayList` uses `638.4 KB` (`0 bytes` overhead, `0.0` bytes overhead per element)\r\n `scala.collection.immutable.Vector` uses `659 KB` (`20.7 KB` overhead, `0.6` bytes overhead per element)\r\n `clojure.lang.PersistentVector` uses `683.8 KB` (`45.4 KB` overhead, `1.4` bytes overhead per element)\r\n `org.pcollections.TreePVector` uses `1.7 MB` (`1.1 MB` overhead, `36.0` bytes overhead per element)\r\n `fj.data.Seq` uses `3.3 MB` (`2.6 MB` overhead, `84.1` bytes overhead per element)\r\n `javaslang.collection.Vector` uses `659 KB` (`20.7 KB` overhead, `0.6` bytes overhead per element)\r\n\r\nfor 1024 elements\r\n `java.util.ArrayList` uses `18.6 KB` (`0 bytes` overhead, `0.0` bytes overhead per element)\r\n `scala.collection.immutable.Vector` uses `19.3 KB` (`672 bytes` overhead, `0.7` bytes overhead per element)\r\n `clojure.lang.PersistentVector` uses `20 KB` (`1.4 KB` overhead, `1.4` bytes overhead per element)\r\n `org.pcollections.TreePVector` uses `54.7 KB` (`36.1 KB` overhead, `36.1` bytes overhead per element)\r\n `fj.data.Seq` uses `102.3 KB` (`83.7 KB` overhead, `83.7` bytes overhead per element)\r\n `javaslang.collection.Vector` uses `19.3 KB` (`712 bytes` overhead, `0.7` bytes overhead per element)\r\n\r\nfor 32 elements\r\n `java.util.ArrayList` uses `504 bytes` (`0 bytes` overhead, `0.0` bytes overhead per element)\r\n `scala.collection.immutable.Vector` uses `536 bytes` (`32 bytes` overhead, `1.0` bytes overhead per element)\r\n `clojure.lang.PersistentVector` uses `704 bytes` (`200 bytes` overhead, `6.2` bytes overhead per element)\r\n `org.pcollections.TreePVector` uses `1.7 KB` (`1.2 KB` overhead, `37.8` bytes overhead per element)\r\n `fj.data.Seq` uses `3 KB` (`2.5 KB` overhead, `80.0` bytes overhead per element)\r\n `javaslang.collection.Vector` uses `584 bytes` (`80 bytes` overhead, `2.5` bytes overhead per element)\r\n```\r\n\r\nThe implementation is quite complex, please review it from your IDE instead (preferably commit-by-commit) :).\r\n\r\nEvery comment is very welcome! :)\r\n\r\n@danieldietrich, @zsolt-donca, @szili88, @ovidiudeac, @djspiewak, please review.","created_at":"2016-07-17T00:32:09Z","updated_at":"2016-07-31T13:54:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"dcc3ec3252d42ffa84f467eb69801e341067418b","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/javaslang/javaslang/pulls/1449/commits","review_comments_url":"https://api.github.com/repos/javaslang/javaslang/pulls/1449/comments","review_comment_url":"https://api.github.com/repos/javaslang/javaslang/pulls/comments{/number}","comments_url":"https://api.github.com/repos/javaslang/javaslang/issues/1449/comments","statuses_url":"https://api.github.com/repos/javaslang/javaslang/statuses/f6dcdcd5a62e4de9317741868c161440ce2c9c32","head":{"label":"paplorinc:OptimizeVector","ref":"OptimizeVector","sha":"f6dcdcd5a62e4de9317741868c161440ce2c9c32","user":{"login":"paplorinc","id":1841944,"avatar_url":"https://avatars.githubusercontent.com/u/1841944?v=3","gravatar_id":"","url":"https://api.github.com/users/paplorinc","html_url":"https://github.com/paplorinc","followers_url":"https://api.github.com/users/paplorinc/followers","following_url":"https://api.github.com/users/paplorinc/following{/other_user}","gists_url":"https://api.github.com/users/paplorinc/gists{/gist_id}","starred_url":"https://api.github.com/users/paplorinc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paplorinc/subscriptions","organizations_url":"https://api.github.com/users/paplorinc/orgs","repos_url":"https://api.github.com/users/paplorinc/repos","events_url":"https://api.github.com/users/paplorinc/events{/privacy}","received_events_url":"https://api.github.com/users/paplorinc/received_events","type":"User","site_admin":false},"repo":{"id":55842829,"name":"javaslang","full_name":"paplorinc/javaslang","owner":{"login":"paplorinc","id":1841944,"avatar_url":"https://avatars.githubusercontent.com/u/1841944?v=3","gravatar_id":"","url":"https://api.github.com/users/paplorinc","html_url":"https://github.com/paplorinc","followers_url":"https://api.github.com/users/paplorinc/followers","following_url":"https://api.github.com/users/paplorinc/following{/other_user}","gists_url":"https://api.github.com/users/paplorinc/gists{/gist_id}","starred_url":"https://api.github.com/users/paplorinc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paplorinc/subscriptions","organizations_url":"https://api.github.com/users/paplorinc/orgs","repos_url":"https://api.github.com/users/paplorinc/repos","events_url":"https://api.github.com/users/paplorinc/events{/privacy}","received_events_url":"https://api.github.com/users/paplorinc/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/paplorinc/javaslang","description":"A functional library for Java 8+ that provides persistent data types and functional control structures.","fork":true,"url":"https://api.github.com/repos/paplorinc/javaslang","forks_url":"https://api.github.com/repos/paplorinc/javaslang/forks","keys_url":"https://api.github.com/repos/paplorinc/javaslang/keys{/key_id}","collaborators_url":"https://api.github.com/repos/paplorinc/javaslang/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/paplorinc/javaslang/teams","hooks_url":"https://api.github.com/repos/paplorinc/javaslang/hooks","issue_events_url":"https://api.github.com/repos/paplorinc/javaslang/issues/events{/number}","events_url":"https://api.github.com/repos/paplorinc/javaslang/events","assignees_url":"https://api.github.com/repos/paplorinc/javaslang/assignees{/user}","branches_url":"https://api.github.com/repos/paplorinc/javaslang/branches{/branch}","tags_url":"https://api.github.com/repos/paplorinc/javaslang/tags","blobs_url":"https://api.github.com/repos/paplorinc/javaslang/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/paplorinc/javaslang/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/paplorinc/javaslang/git/refs{/sha}","trees_url":"https://api.github.com/repos/paplorinc/javaslang/git/trees{/sha}","statuses_url":"https://api.github.com/repos/paplorinc/javaslang/statuses/{sha}","languages_url":"https://api.github.com/repos/paplorinc/javaslang/languages","stargazers_url":"https://api.github.com/repos/paplorinc/javaslang/stargazers","contributors_url":"https://api.github.com/repos/paplorinc/javaslang/contributors","subscribers_url":"https://api.github.com/repos/paplorinc/javaslang/subscribers","subscription_url":"https://api.github.com/repos/paplorinc/javaslang/subscription","commits_url":"https://api.github.com/repos/paplorinc/javaslang/commits{/sha}","git_commits_url":"https://api.github.com/repos/paplorinc/javaslang/git/commits{/sha}","comments_url":"https://api.github.com/repos/paplorinc/javaslang/comments{/number}","issue_comment_url":"https://api.github.com/repos/paplorinc/javaslang/issues/comments{/number}","contents_url":"https://api.github.com/repos/paplorinc/javaslang/contents/{+path}","compare_url":"https://api.github.com/repos/paplorinc/javaslang/compare/{base}...{head}","merges_url":"https://api.github.com/repos/paplorinc/javaslang/merges","archive_url":"https://api.github.com/repos/paplorinc/javaslang/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/paplorinc/javaslang/downloads","issues_url":"https://api.github.com/repos/paplorinc/javaslang/issues{/number}","pulls_url":"https://api.github.com/repos/paplorinc/javaslang/pulls{/number}","milestones_url":"https://api.github.com/repos/paplorinc/javaslang/milestones{/number}","notifications_url":"https://api.github.com/repos/paplorinc/javaslang/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/paplorinc/javaslang/labels{/name}","releases_url":"https://api.github.com/repos/paplorinc/javaslang/releases{/id}","deployments_url":"https://api.github.com/repos/paplorinc/javaslang/deployments","created_at":"2016-04-09T12:20:36Z","updated_at":"2016-04-09T12:20:39Z","pushed_at":"2016-07-31T11:18:11Z","git_url":"git://github.com/paplorinc/javaslang.git","ssh_url":"git@github.com:paplorinc/javaslang.git","clone_url":"https://github.com/paplorinc/javaslang.git","svn_url":"https://github.com/paplorinc/javaslang","homepage":"http://javaslang.io","size":12341,"stargazers_count":0,"watchers_count":0,"language":"Java","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":"javaslang:master","ref":"master","sha":"80cdd21e7610aa8bcd684c1d64e7a93e0cbc9cec","user":{"login":"javaslang","id":5786132,"avatar_url":"https://avatars.githubusercontent.com/u/5786132?v=3","gravatar_id":"","url":"https://api.github.com/users/javaslang","html_url":"https://github.com/javaslang","followers_url":"https://api.github.com/users/javaslang/followers","following_url":"https://api.github.com/users/javaslang/following{/other_user}","gists_url":"https://api.github.com/users/javaslang/gists{/gist_id}","starred_url":"https://api.github.com/users/javaslang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/javaslang/subscriptions","organizations_url":"https://api.github.com/users/javaslang/orgs","repos_url":"https://api.github.com/users/javaslang/repos","events_url":"https://api.github.com/users/javaslang/events{/privacy}","received_events_url":"https://api.github.com/users/javaslang/received_events","type":"Organization","site_admin":false},"repo":{"id":16378879,"name":"javaslang","full_name":"javaslang/javaslang","owner":{"login":"javaslang","id":5786132,"avatar_url":"https://avatars.githubusercontent.com/u/5786132?v=3","gravatar_id":"","url":"https://api.github.com/users/javaslang","html_url":"https://github.com/javaslang","followers_url":"https://api.github.com/users/javaslang/followers","following_url":"https://api.github.com/users/javaslang/following{/other_user}","gists_url":"https://api.github.com/users/javaslang/gists{/gist_id}","starred_url":"https://api.github.com/users/javaslang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/javaslang/subscriptions","organizations_url":"https://api.github.com/users/javaslang/orgs","repos_url":"https://api.github.com/users/javaslang/repos","events_url":"https://api.github.com/users/javaslang/events{/privacy}","received_events_url":"https://api.github.com/users/javaslang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/javaslang/javaslang","description":"A functional library for Java 8+ that provides persistent data types and functional control structures.","fork":false,"url":"https://api.github.com/repos/javaslang/javaslang","forks_url":"https://api.github.com/repos/javaslang/javaslang/forks","keys_url":"https://api.github.com/repos/javaslang/javaslang/keys{/key_id}","collaborators_url":"https://api.github.com/repos/javaslang/javaslang/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/javaslang/javaslang/teams","hooks_url":"https://api.github.com/repos/javaslang/javaslang/hooks","issue_events_url":"https://api.github.com/repos/javaslang/javaslang/issues/events{/number}","events_url":"https://api.github.com/repos/javaslang/javaslang/events","assignees_url":"https://api.github.com/repos/javaslang/javaslang/assignees{/user}","branches_url":"https://api.github.com/repos/javaslang/javaslang/branches{/branch}","tags_url":"https://api.github.com/repos/javaslang/javaslang/tags","blobs_url":"https://api.github.com/repos/javaslang/javaslang/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/javaslang/javaslang/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/javaslang/javaslang/git/refs{/sha}","trees_url":"https://api.github.com/repos/javaslang/javaslang/git/trees{/sha}","statuses_url":"https://api.github.com/repos/javaslang/javaslang/statuses/{sha}","languages_url":"https://api.github.com/repos/javaslang/javaslang/languages","stargazers_url":"https://api.github.com/repos/javaslang/javaslang/stargazers","contributors_url":"https://api.github.com/repos/javaslang/javaslang/contributors","subscribers_url":"https://api.github.com/repos/javaslang/javaslang/subscribers","subscription_url":"https://api.github.com/repos/javaslang/javaslang/subscription","commits_url":"https://api.github.com/repos/javaslang/javaslang/commits{/sha}","git_commits_url":"https://api.github.com/repos/javaslang/javaslang/git/commits{/sha}","comments_url":"https://api.github.com/repos/javaslang/javaslang/comments{/number}","issue_comment_url":"https://api.github.com/repos/javaslang/javaslang/issues/comments{/number}","contents_url":"https://api.github.com/repos/javaslang/javaslang/contents/{+path}","compare_url":"https://api.github.com/repos/javaslang/javaslang/compare/{base}...{head}","merges_url":"https://api.github.com/repos/javaslang/javaslang/merges","archive_url":"https://api.github.com/repos/javaslang/javaslang/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/javaslang/javaslang/downloads","issues_url":"https://api.github.com/repos/javaslang/javaslang/issues{/number}","pulls_url":"https://api.github.com/repos/javaslang/javaslang/pulls{/number}","milestones_url":"https://api.github.com/repos/javaslang/javaslang/milestones{/number}","notifications_url":"https://api.github.com/repos/javaslang/javaslang/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/javaslang/javaslang/labels{/name}","releases_url":"https://api.github.com/repos/javaslang/javaslang/releases{/id}","deployments_url":"https://api.github.com/repos/javaslang/javaslang/deployments","created_at":"2014-01-30T14:07:25Z","updated_at":"2016-07-31T02:23:03Z","pushed_at":"2016-07-31T11:18:13Z","git_url":"git://github.com/javaslang/javaslang.git","ssh_url":"git@github.com:javaslang/javaslang.git","clone_url":"https://github.com/javaslang/javaslang.git","svn_url":"https://github.com/javaslang/javaslang","homepage":"http://javaslang.io","size":13800,"stargazers_count":1064,"watchers_count":1064,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":123,"mirror_url":null,"open_issues_count":104,"forks":123,"open_issues":104,"watchers":1064,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/1449"},"html":{"href":"https://github.com/javaslang/javaslang/pull/1449"},"issue":{"href":"https://api.github.com/repos/javaslang/javaslang/issues/1449"},"comments":{"href":"https://api.github.com/repos/javaslang/javaslang/issues/1449/comments"},"review_comments":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/1449/comments"},"review_comment":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/1449/commits"},"statuses":{"href":"https://api.github.com/repos/javaslang/javaslang/statuses/f6dcdcd5a62e4de9317741868c161440ce2c9c32"}}}}
{"actor":{"display_login":"zsolt-donca"}}