{"action":"created","comment":{"url":"https://api.github.com/repos/scalaz/scalaz/pulls/comments/59080900","id":59080900,"diff_hunk":"@@ -0,0 +1,449 @@\n+package scalaz\n+\n+import scala.collection.mutable\n+import std.vector.{vectorInstance, vectorMonoid}\n+\n+/**\n+  *\n+  * @param rootLabel The label at the root of this tree.\n+  * @param subForest The child nodes of this tree.\n+  * @tparam A\n+  */\n+case class StrictTree[A](\n+  rootLabel: A,\n+  subForest: Vector[StrictTree[A]]\n+) {\n+\n+  import StrictTree._\n+\n+  /**\n+    * Run a bottom-up algorithm.\n+    *\n+    * This is the framework for several stackless methods, such as map.\n+    *\n+    * @param combiner is a function from a label and the mapped children to the new result.\n+    */\n+  private[scalaz] def runBottomUp[B](\n+    combiner: A => mutable.Buffer[B] => B\n+  ): B = {\n+    val root = BottomUpStackElem[B](None, this)\n+    val stack = mutable.Stack[BottomUpStackElem[B]](root)\n+\n+    while (stack.nonEmpty) {\n+      val here = stack.elems.head\n+      if (here.hasNext) {\n+        val child = here.next()\n+        val nextStackElem = BottomUpStackElem[B](Some(here), child)\n+        stack.push(nextStackElem)\n+      } else {\n+        //The \"here\" node is completed, so add its result to its parents completed children.\n+        val result = combiner(here.rootLabel)(here.mappedSubForest)\n+        here.parent.foreach(_.mappedSubForest += result)\n+        stack.pop()\n+      }\n+    }\n+\n+    combiner(rootLabel)(root.mappedSubForest)\n+  }\n+\n+  private case class BottomUpStackElem[B](\n+    parent: Option[BottomUpStackElem[B]],\n+    tree: StrictTree[A]\n+  ) extends Iterator[StrictTree[A]] {\n+    private val subIterator = tree.subForest.iterator\n+\n+    def rootLabel = tree.rootLabel\n+\n+    val mappedSubForest: mutable.Buffer[B] = mutable.Buffer.empty\n+\n+    override def hasNext: Boolean = subIterator.hasNext\n+\n+    override def next(): StrictTree[A] = subIterator.next()\n+  }\n+\n+  /**\n+    * This implementation is 9x faster than the trampolined implementation for StrictTreeTestJVM's foldMap test.\n+    */\n+  private def foldMapCombiner[B: Monoid](\n+    f: A => B\n+  )(rootLabel: A\n+  )(subForest: mutable.Buffer[B]\n+  ): B = {\n+    val mappedRoot = f(rootLabel)\n+    val foldedForest = Foldable[Vector].fold[B](subForest.toVector)\n+\n+    Monoid[B].append(mappedRoot, foldedForest)\n+  }\n+\n+  /** Maps the elements of the StrictTree into a Monoid and folds the resulting StrictTree. */\n+  def foldMap[B: Monoid](f: A => B): B =\n+    runBottomUp(foldMapCombiner(f))\n+\n+  def foldRight[B](z: B)(f: (A, => B) => B): B =\n+    Foldable[Vector].foldRight(flatten, z)(f)\n+\n+  /** A 2D String representation of this StrictTree. */\n+  def drawTree(implicit sh: Show[A]): String = {\n+    toTree.drawTree\n+  }\n+\n+  /**\n+    * This implementation is 16x faster than the trampolined implementation for StrictTreeTestJVM's scanr test.\n+    */\n+  private def scanrCombiner[B](\n+    f: (A, Vector[StrictTree[B]]) => B\n+  )(rootLabel: A\n+  )(subForest: mutable.Buffer[StrictTree[B]]\n+  ): StrictTree[B] = {\n+    val subForestVector = subForest.toVector\n+    StrictTree[B](f(rootLabel, subForestVector), subForestVector)\n+  }\n+\n+  /** A histomorphic transform. Each element in the resulting tree\n+    * is a function of the corresponding element in this tree\n+    * and the histomorphic transform of its children.\n+    */\n+  def scanr[B](g: (A, Vector[StrictTree[B]]) => B): StrictTree[B] =\n+    runBottomUp(scanrCombiner(g))\n+\n+  /** Pre-order traversal. */\n+  def flatten: Vector[A] = {\n+    val stack = mutable.Stack(this)\n+\n+    val result = mutable.Buffer.empty[A]\n+\n+    while (stack.nonEmpty) {\n+      val popped = stack.pop()\n+      result += popped.rootLabel\n+      popped.subForest.reverseIterator.foreach(stack.push)\n+    }\n+\n+    result.toVector\n+  }\n+\n+  def size: Int = {\n+    val stack = mutable.Stack(this.subForest)\n+\n+    var result = 1\n+\n+    while (stack.nonEmpty) {\n+      val popped = stack.pop()\n+      result += popped.size\n+      stack.pushAll(popped.map(_.subForest))\n+    }\n+\n+    result\n+  }\n+\n+  /** Breadth-first traversal. */\n+  def levels: Vector[Vector[A]] = {\n+    val f = (s: Vector[StrictTree[A]]) => {\n+      Foldable[Vector].foldMap(s)((_: StrictTree[A]).subForest)\n+    }\n+    Vector.iterate(Vector(this), size)(f) takeWhile (!_.isEmpty) map (_ map (_.rootLabel))\n+  }\n+\n+  def toTree: Tree[A] = {\n+    Tree.Node[A](rootLabel, subForest.toStream.map(_.toTree))\n+  }\n+\n+  /** Binds the given function across all the subtrees of this tree. */\n+  def cobind[B](f: StrictTree[A] => B): StrictTree[B] = unfoldTree(this)(t => (f(t), () => t.subForest))\n+\n+  def foldNode[Z](f: A => Vector[StrictTree[A]] => Z): Z =\n+    f(rootLabel)(subForest)\n+\n+  /**\n+    * This implementation is 10x faster than mapTrampoline for StrictTreeTestJVM's map test.\n+    */\n+  private def mapCombiner[B](f: A => B)(rootLabel: A)(subForest: Seq[StrictTree[B]]): StrictTree[B] = {\n+    StrictTree[B](f(rootLabel), subForest.toVector)\n+  }\n+\n+  def map[B](f: A => B): StrictTree[B] = {\n+    runBottomUp(mapCombiner(f))\n+  }\n+\n+  /**\n+    * This implementation is 9x faster than flatMapTrampoline for StrictTreeTestJVM's flatMap test.\n+    */\n+  private def flatMapCombiner[B](f: A => StrictTree[B])(root: A)(subForest: Seq[StrictTree[B]]): StrictTree[B] = {\n+    val StrictTree(rootLabel0, subForest0) = f(root)\n+    StrictTree(rootLabel0, subForest0 ++ subForest)\n+  }\n+\n+  def flatMap[B](f: A => StrictTree[B]): StrictTree[B] = {\n+    runBottomUp(flatMapCombiner(f))\n+  }\n+\n+  def traverse1[G[_] : Apply, B](f: A => G[B]): G[StrictTree[B]] = {\n+    val G = Apply[G]\n+\n+    subForest match {\n+      case Vector() => G.map(f(rootLabel))(Leaf(_))\n+      case x +: xs => G.apply2(f(rootLabel), NonEmptyList.nel(x, IList.fromFoldable(xs)).traverse1(_.traverse1(f))) {\n+        case (h, t) => Node(h, t.list.toVector)\n+      }\n+    }\n+  }\n+\n+  private case class ZipStackElem[B](\n+    parent: Option[ZipStackElem[B]],\n+    a: StrictTree[A],\n+    b: StrictTree[B]\n+  ) extends Iterator[(StrictTree[A], StrictTree[B])] {\n+    private val zippedSubIterator =\n+      a.subForest.iterator.zip(b.subForest.iterator)\n+\n+    val mappedSubForest: mutable.Buffer[StrictTree[(A, B)]] = mutable.Buffer.empty\n+\n+    override def hasNext: Boolean = zippedSubIterator.hasNext\n+\n+    override def next(): (StrictTree[A], StrictTree[B]) = zippedSubIterator.next()\n+  }\n+\n+  def zip[B](b: StrictTree[B]): StrictTree[(A, B)] = {\n+    val root = ZipStackElem[B](None, this, b)\n+    val stack = mutable.Stack[ZipStackElem[B]](root)\n+\n+    while (stack.nonEmpty) {\n+      val here = stack.elems.head\n+      if (here.hasNext) {\n+        val (childA, childB) = here.next()\n+        val nextStackElem = ZipStackElem[B](Some(here), childA, childB)\n+        stack.push(nextStackElem)\n+      } else {\n+        //The \"here\" node is completed, so add its result to its parents completed children.\n+        val result = StrictTree((here.a.rootLabel, here.b.rootLabel), here.mappedSubForest.toVector)\n+        here.parent.foreach(_.mappedSubForest += result)\n+        stack.pop()\n+      }\n+    }\n+\n+    StrictTree((rootLabel, b.rootLabel), root.mappedSubForest.toVector)\n+  }\n+\n+  private def hashCodeCombiner(root: A)(subForest: Seq[Int]): Int = {\n+    root.hashCode ^ subForest.hashCode\n+  }\n+\n+  /**\n+    * This implementation is 24x faster than the trampolined implementation for StrictTreeTestJVM's hashCode test.\n+    *\n+    * @return\n+    */\n+  override def hashCode(): Int = {\n+    runBottomUp(hashCodeCombiner)\n+  }\n+\n+  override def equals(obj: scala.Any): Boolean = {","path":"core/src/main/scala/scalaz/StrictTree.scala","position":239,"original_position":239,"commit_id":"9ec9cdf7f94623c5d5e347d395a9f9b986451e16","original_commit_id":"9ec9cdf7f94623c5d5e347d395a9f9b986451e16","user":{"login":"xuwei-k","id":389787,"avatar_url":"https://avatars.githubusercontent.com/u/389787?v=3","gravatar_id":"","url":"https://api.github.com/users/xuwei-k","html_url":"https://github.com/xuwei-k","followers_url":"https://api.github.com/users/xuwei-k/followers","following_url":"https://api.github.com/users/xuwei-k/following{/other_user}","gists_url":"https://api.github.com/users/xuwei-k/gists{/gist_id}","starred_url":"https://api.github.com/users/xuwei-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xuwei-k/subscriptions","organizations_url":"https://api.github.com/users/xuwei-k/orgs","repos_url":"https://api.github.com/users/xuwei-k/repos","events_url":"https://api.github.com/users/xuwei-k/events{/privacy}","received_events_url":"https://api.github.com/users/xuwei-k/received_events","type":"User","site_admin":false},"body":"unnecessary override?","created_at":"2016-04-08T19:58:33Z","updated_at":"2016-04-08T19:58:33Z","html_url":"https://github.com/scalaz/scalaz/pull/1137#discussion_r59080900","pull_request_url":"https://api.github.com/repos/scalaz/scalaz/pulls/1137","_links":{"self":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/comments/59080900"},"html":{"href":"https://github.com/scalaz/scalaz/pull/1137#discussion_r59080900"},"pull_request":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/1137"}}},"pull_request":{"url":"https://api.github.com/repos/scalaz/scalaz/pulls/1137","id":64652849,"html_url":"https://github.com/scalaz/scalaz/pull/1137","diff_url":"https://github.com/scalaz/scalaz/pull/1137.diff","patch_url":"https://github.com/scalaz/scalaz/pull/1137.patch","issue_url":"https://api.github.com/repos/scalaz/scalaz/issues/1137","number":1137,"state":"open","locked":false,"title":"add StrictTree","user":{"login":"shawjef3","id":1625822,"avatar_url":"https://avatars.githubusercontent.com/u/1625822?v=3","gravatar_id":"","url":"https://api.github.com/users/shawjef3","html_url":"https://github.com/shawjef3","followers_url":"https://api.github.com/users/shawjef3/followers","following_url":"https://api.github.com/users/shawjef3/following{/other_user}","gists_url":"https://api.github.com/users/shawjef3/gists{/gist_id}","starred_url":"https://api.github.com/users/shawjef3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shawjef3/subscriptions","organizations_url":"https://api.github.com/users/shawjef3/orgs","repos_url":"https://api.github.com/users/shawjef3/repos","events_url":"https://api.github.com/users/shawjef3/events{/privacy}","received_events_url":"https://api.github.com/users/shawjef3/received_events","type":"User","site_admin":false},"body":"This is a strict version of Tree. Maybe some people would find it useful.\r\n\r\nIt's largely a copy of Tree, which I altered for maximum strictness.","created_at":"2016-03-30T16:01:35Z","updated_at":"2016-04-08T19:58:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2f30a6c8f284337b063a1a6844b7faaddac4944c","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/scalaz/scalaz/pulls/1137/commits","review_comments_url":"https://api.github.com/repos/scalaz/scalaz/pulls/1137/comments","review_comment_url":"https://api.github.com/repos/scalaz/scalaz/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scalaz/scalaz/issues/1137/comments","statuses_url":"https://api.github.com/repos/scalaz/scalaz/statuses/9ec9cdf7f94623c5d5e347d395a9f9b986451e16","head":{"label":"shawjef3:topic/strict-tree","ref":"topic/strict-tree","sha":"9ec9cdf7f94623c5d5e347d395a9f9b986451e16","user":{"login":"shawjef3","id":1625822,"avatar_url":"https://avatars.githubusercontent.com/u/1625822?v=3","gravatar_id":"","url":"https://api.github.com/users/shawjef3","html_url":"https://github.com/shawjef3","followers_url":"https://api.github.com/users/shawjef3/followers","following_url":"https://api.github.com/users/shawjef3/following{/other_user}","gists_url":"https://api.github.com/users/shawjef3/gists{/gist_id}","starred_url":"https://api.github.com/users/shawjef3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shawjef3/subscriptions","organizations_url":"https://api.github.com/users/shawjef3/orgs","repos_url":"https://api.github.com/users/shawjef3/repos","events_url":"https://api.github.com/users/shawjef3/events{/privacy}","received_events_url":"https://api.github.com/users/shawjef3/received_events","type":"User","site_admin":false},"repo":{"id":45223572,"name":"scalaz","full_name":"shawjef3/scalaz","owner":{"login":"shawjef3","id":1625822,"avatar_url":"https://avatars.githubusercontent.com/u/1625822?v=3","gravatar_id":"","url":"https://api.github.com/users/shawjef3","html_url":"https://github.com/shawjef3","followers_url":"https://api.github.com/users/shawjef3/followers","following_url":"https://api.github.com/users/shawjef3/following{/other_user}","gists_url":"https://api.github.com/users/shawjef3/gists{/gist_id}","starred_url":"https://api.github.com/users/shawjef3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shawjef3/subscriptions","organizations_url":"https://api.github.com/users/shawjef3/orgs","repos_url":"https://api.github.com/users/shawjef3/repos","events_url":"https://api.github.com/users/shawjef3/events{/privacy}","received_events_url":"https://api.github.com/users/shawjef3/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/shawjef3/scalaz","description":"An extension to the core Scala library for functional programming.","fork":true,"url":"https://api.github.com/repos/shawjef3/scalaz","forks_url":"https://api.github.com/repos/shawjef3/scalaz/forks","keys_url":"https://api.github.com/repos/shawjef3/scalaz/keys{/key_id}","collaborators_url":"https://api.github.com/repos/shawjef3/scalaz/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/shawjef3/scalaz/teams","hooks_url":"https://api.github.com/repos/shawjef3/scalaz/hooks","issue_events_url":"https://api.github.com/repos/shawjef3/scalaz/issues/events{/number}","events_url":"https://api.github.com/repos/shawjef3/scalaz/events","assignees_url":"https://api.github.com/repos/shawjef3/scalaz/assignees{/user}","branches_url":"https://api.github.com/repos/shawjef3/scalaz/branches{/branch}","tags_url":"https://api.github.com/repos/shawjef3/scalaz/tags","blobs_url":"https://api.github.com/repos/shawjef3/scalaz/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/shawjef3/scalaz/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/shawjef3/scalaz/git/refs{/sha}","trees_url":"https://api.github.com/repos/shawjef3/scalaz/git/trees{/sha}","statuses_url":"https://api.github.com/repos/shawjef3/scalaz/statuses/{sha}","languages_url":"https://api.github.com/repos/shawjef3/scalaz/languages","stargazers_url":"https://api.github.com/repos/shawjef3/scalaz/stargazers","contributors_url":"https://api.github.com/repos/shawjef3/scalaz/contributors","subscribers_url":"https://api.github.com/repos/shawjef3/scalaz/subscribers","subscription_url":"https://api.github.com/repos/shawjef3/scalaz/subscription","commits_url":"https://api.github.com/repos/shawjef3/scalaz/commits{/sha}","git_commits_url":"https://api.github.com/repos/shawjef3/scalaz/git/commits{/sha}","comments_url":"https://api.github.com/repos/shawjef3/scalaz/comments{/number}","issue_comment_url":"https://api.github.com/repos/shawjef3/scalaz/issues/comments{/number}","contents_url":"https://api.github.com/repos/shawjef3/scalaz/contents/{+path}","compare_url":"https://api.github.com/repos/shawjef3/scalaz/compare/{base}...{head}","merges_url":"https://api.github.com/repos/shawjef3/scalaz/merges","archive_url":"https://api.github.com/repos/shawjef3/scalaz/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/shawjef3/scalaz/downloads","issues_url":"https://api.github.com/repos/shawjef3/scalaz/issues{/number}","pulls_url":"https://api.github.com/repos/shawjef3/scalaz/pulls{/number}","milestones_url":"https://api.github.com/repos/shawjef3/scalaz/milestones{/number}","notifications_url":"https://api.github.com/repos/shawjef3/scalaz/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/shawjef3/scalaz/labels{/name}","releases_url":"https://api.github.com/repos/shawjef3/scalaz/releases{/id}","deployments_url":"https://api.github.com/repos/shawjef3/scalaz/deployments","created_at":"2015-10-30T02:15:37Z","updated_at":"2016-04-08T19:41:36Z","pushed_at":"2016-04-08T19:41:30Z","git_url":"git://github.com/shawjef3/scalaz.git","ssh_url":"git@github.com:shawjef3/scalaz.git","clone_url":"https://github.com/shawjef3/scalaz.git","svn_url":"https://github.com/shawjef3/scalaz","homepage":"","size":93995,"stargazers_count":0,"watchers_count":0,"language":"Scala","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":"series/7.2.x"}},"base":{"label":"scalaz:series/7.3.x","ref":"series/7.3.x","sha":"3a37b10745cc504fd59cf50bede6a3574857fa1a","user":{"login":"scalaz","id":183416,"avatar_url":"https://avatars.githubusercontent.com/u/183416?v=3","gravatar_id":"","url":"https://api.github.com/users/scalaz","html_url":"https://github.com/scalaz","followers_url":"https://api.github.com/users/scalaz/followers","following_url":"https://api.github.com/users/scalaz/following{/other_user}","gists_url":"https://api.github.com/users/scalaz/gists{/gist_id}","starred_url":"https://api.github.com/users/scalaz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalaz/subscriptions","organizations_url":"https://api.github.com/users/scalaz/orgs","repos_url":"https://api.github.com/users/scalaz/repos","events_url":"https://api.github.com/users/scalaz/events{/privacy}","received_events_url":"https://api.github.com/users/scalaz/received_events","type":"Organization","site_admin":false},"repo":{"id":474633,"name":"scalaz","full_name":"scalaz/scalaz","owner":{"login":"scalaz","id":183416,"avatar_url":"https://avatars.githubusercontent.com/u/183416?v=3","gravatar_id":"","url":"https://api.github.com/users/scalaz","html_url":"https://github.com/scalaz","followers_url":"https://api.github.com/users/scalaz/followers","following_url":"https://api.github.com/users/scalaz/following{/other_user}","gists_url":"https://api.github.com/users/scalaz/gists{/gist_id}","starred_url":"https://api.github.com/users/scalaz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalaz/subscriptions","organizations_url":"https://api.github.com/users/scalaz/orgs","repos_url":"https://api.github.com/users/scalaz/repos","events_url":"https://api.github.com/users/scalaz/events{/privacy}","received_events_url":"https://api.github.com/users/scalaz/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scalaz/scalaz","description":"An extension to the core Scala library for functional programming.","fork":false,"url":"https://api.github.com/repos/scalaz/scalaz","forks_url":"https://api.github.com/repos/scalaz/scalaz/forks","keys_url":"https://api.github.com/repos/scalaz/scalaz/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scalaz/scalaz/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scalaz/scalaz/teams","hooks_url":"https://api.github.com/repos/scalaz/scalaz/hooks","issue_events_url":"https://api.github.com/repos/scalaz/scalaz/issues/events{/number}","events_url":"https://api.github.com/repos/scalaz/scalaz/events","assignees_url":"https://api.github.com/repos/scalaz/scalaz/assignees{/user}","branches_url":"https://api.github.com/repos/scalaz/scalaz/branches{/branch}","tags_url":"https://api.github.com/repos/scalaz/scalaz/tags","blobs_url":"https://api.github.com/repos/scalaz/scalaz/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scalaz/scalaz/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scalaz/scalaz/git/refs{/sha}","trees_url":"https://api.github.com/repos/scalaz/scalaz/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scalaz/scalaz/statuses/{sha}","languages_url":"https://api.github.com/repos/scalaz/scalaz/languages","stargazers_url":"https://api.github.com/repos/scalaz/scalaz/stargazers","contributors_url":"https://api.github.com/repos/scalaz/scalaz/contributors","subscribers_url":"https://api.github.com/repos/scalaz/scalaz/subscribers","subscription_url":"https://api.github.com/repos/scalaz/scalaz/subscription","commits_url":"https://api.github.com/repos/scalaz/scalaz/commits{/sha}","git_commits_url":"https://api.github.com/repos/scalaz/scalaz/git/commits{/sha}","comments_url":"https://api.github.com/repos/scalaz/scalaz/comments{/number}","issue_comment_url":"https://api.github.com/repos/scalaz/scalaz/issues/comments{/number}","contents_url":"https://api.github.com/repos/scalaz/scalaz/contents/{+path}","compare_url":"https://api.github.com/repos/scalaz/scalaz/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scalaz/scalaz/merges","archive_url":"https://api.github.com/repos/scalaz/scalaz/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scalaz/scalaz/downloads","issues_url":"https://api.github.com/repos/scalaz/scalaz/issues{/number}","pulls_url":"https://api.github.com/repos/scalaz/scalaz/pulls{/number}","milestones_url":"https://api.github.com/repos/scalaz/scalaz/milestones{/number}","notifications_url":"https://api.github.com/repos/scalaz/scalaz/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scalaz/scalaz/labels{/name}","releases_url":"https://api.github.com/repos/scalaz/scalaz/releases{/id}","deployments_url":"https://api.github.com/repos/scalaz/scalaz/deployments","created_at":"2010-01-16T06:18:51Z","updated_at":"2016-04-08T18:44:39Z","pushed_at":"2016-04-08T19:48:39Z","git_url":"git://github.com/scalaz/scalaz.git","ssh_url":"git@github.com:scalaz/scalaz.git","clone_url":"https://github.com/scalaz/scalaz.git","svn_url":"https://github.com/scalaz/scalaz","homepage":"http://scalaz.github.io/scalaz/#scaladoc","size":101906,"stargazers_count":2468,"watchers_count":2468,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":404,"mirror_url":null,"open_issues_count":73,"forks":404,"open_issues":73,"watchers":2468,"default_branch":"series/7.3.x"}},"_links":{"self":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/1137"},"html":{"href":"https://github.com/scalaz/scalaz/pull/1137"},"issue":{"href":"https://api.github.com/repos/scalaz/scalaz/issues/1137"},"comments":{"href":"https://api.github.com/repos/scalaz/scalaz/issues/1137/comments"},"review_comments":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/1137/comments"},"review_comment":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/1137/commits"},"statuses":{"href":"https://api.github.com/repos/scalaz/scalaz/statuses/9ec9cdf7f94623c5d5e347d395a9f9b986451e16"}}}}