{"action":"created","comment":{"url":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/comments/226591329","pull_request_review_id":166451715,"id":226591329,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNjU5MTMyOQ==","diff_hunk":"@@ -4,112 +4,69 @@\n package scalaz.zio\n \n import internals._\n-import scalaz.zio.ExitResult.Terminated\n \n import scala.annotation.tailrec\n import scala.collection.immutable.{ Queue => IQueue }\n \n final class Semaphore private (private val state: Ref[State]) {\n \n-  def count: IO[Nothing, Long] = state.get.map(count_)\n+  final def count: IO[Nothing, Long] = state.get.map(count_)\n \n-  def available: IO[Nothing, Long] = state.get.map {\n+  final def available: IO[Nothing, Long] = state.get.map {\n     case Left(_)  => 0\n     case Right(n) => n\n   }\n \n-  def acquire: IO[Nothing, Unit] = acquireN(1)\n+  final def acquire: IO[Nothing, Unit] = acquireN(1)\n \n-  def release: IO[Nothing, Unit] = releaseN(1)\n+  final def release: IO[Nothing, Unit] = releaseN(1)\n \n-  def withPermit[E, A](task: IO[E, A]): IO[E, A] =\n+  final def withPermit[E, A](task: IO[E, A]): IO[E, A] =\n     IO.bracket[E, Unit, A](acquire)(_ => release)(_ => task)\n \n-  def acquireN(requested: Long): IO[Nothing, Unit] =\n-    assertNonNegative(requested) *>\n-      mkGate.flatMap { gate =>\n-        state.update {\n-          case Left((head, queue)) =>\n-            Left(head -> queue.enqueue(requested -> gate))\n-          case Right(available) =>\n-            if (requested <= available) Right(available - requested)\n-            else Left(((requested - available) -> gate, IQueue.empty[Entry]))\n-\n-        }.flatMap {\n-          case Left((head, _)) => awaitGate(head)\n-          case Right(_)        => IO.unit\n-        }\n-      }\n-\n-  def releaseN(toRelease: Long): IO[Nothing, Unit] =\n-    assertNonNegative(toRelease) *>\n-      state.modify { old =>\n-        @tailrec def releaseRecursively(waiting: NonEmptyQueue, available: Long): State =\n-          waiting match {\n-            // n + 1 in queue case\n-            case ((requested, gate), tail) if tail.nonEmpty && available > 0 =>\n-              if (requested > available) releaseRecursively(((requested - available, gate), tail), available = 0)\n-              else releaseRecursively(tail.dequeue, available - requested)\n-            // 1 in queue case\n-            case ((requested, gate), tail) if tail.isEmpty && available > 0 =>\n-              if (requested > available) Left(((requested - available, gate), tail))\n-              else Right(available - requested)\n-            // n in queue but no more to release\n-            case nonEmptyQueue if available == 0 => Left(nonEmptyQueue)\n-          }\n-\n-        val updated: State = old match {\n-          case Left(waiting) =>\n-            releaseRecursively(waiting, toRelease)\n-          case Right(available) =>\n-            Right(available + toRelease)\n-        }\n-\n-        ((old, updated), updated)\n-      }.flatMap {\n-        case (previous, now) =>\n-          previous match {\n-            case Left(neq) =>\n-              val newSize = now match {\n-                case Left(newNeq) => newNeq.size\n-                case Right(_)     => 0\n-              }\n-              val released = neq.size - newSize\n-              neq.take(released).foldRight(IO.unit) { (entry, unit) =>\n-                openGate(entry) *> unit\n-              }\n-            case Right(_) => IO.unit\n-          }\n-      }\n-\n-  private def mkGate: IO[Nothing, Promise[Nothing, Unit]] = Promise.make[Nothing, Unit]\n-\n-  private def awaitGate(entry: (Long, Promise[Nothing, Unit])): IO[Nothing, Unit] =\n-    IO.unit.bracket0[Nothing, Unit] { (_, useOutcome) =>\n-      useOutcome match {\n-        case _: Terminated[Nothing, Unit] => // Terminated outcome means either interruption or uncaught exception\n-          state.update {\n-            case Left((current, rest)) =>\n-              // if entry is NonEmpty's head and queue is empty, swap to Right, but without any permits\n-              if (current == entry && rest.isEmpty) Right(0)\n-              // if entry is NonEmpty's head and queue is not empty, just drop this entry from head position\n-              else if (current == entry && rest.nonEmpty) Left(rest.dequeue)\n-              // this entry is not current NonEmpty's head, just drop it from queue\n-              else Left((current, rest.filter(_ != entry)))\n-\n-            case Right(m) => Right(m)\n-          }.void\n-        case _ =>\n-          IO.unit\n-      }\n-    }(_ => entry._2.get)\n-\n-  private def openGate[E](entry: (Long, Promise[E, Unit])): IO[E, Unit] =\n-    entry._2.complete(()).void\n-\n-  private def count_(state: State): Long = state match {\n-    case Left((head, tail)) => -(head._1 + tail.map(_._1).sum)\n-    case Right(available)   => available\n+  final def acquireN(requested: Long): IO[Nothing, Unit] = {\n+    val acquire: (Promise[Nothing, Unit], State) => (IO[Nothing, Boolean], State) = {\n+      case (p, Right(n)) if n >= requested => p.complete(()) -> Right(n - requested)\n+      case (p, Right(n))                   => IO.now(false)  -> Left(IQueue(p -> (requested - n)))\n+      case (p, Left(q))                    => IO.now(false)  -> Left(q.enqueue(p -> requested))\n+    }\n+\n+    val release: (Boolean, Promise[Nothing, Unit]) => IO[Nothing, Unit] = {\n+      case (_, p) =>\n+        p.poll.void <> state.update {","path":"core/shared/src/main/scala/scalaz/zio/Semaphore.scala","position":124,"original_position":124,"commit_id":"fd801ad4263d7108c88a9a85d2e48989632ef81d","original_commit_id":"fd801ad4263d7108c88a9a85d2e48989632ef81d","user":{"login":"regiskuckaertz","id":629976,"node_id":"MDQ6VXNlcjYyOTk3Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/629976?v=4","gravatar_id":"","url":"https://api.github.com/users/regiskuckaertz","html_url":"https://github.com/regiskuckaertz","followers_url":"https://api.github.com/users/regiskuckaertz/followers","following_url":"https://api.github.com/users/regiskuckaertz/following{/other_user}","gists_url":"https://api.github.com/users/regiskuckaertz/gists{/gist_id}","starred_url":"https://api.github.com/users/regiskuckaertz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/regiskuckaertz/subscriptions","organizations_url":"https://api.github.com/users/regiskuckaertz/orgs","repos_url":"https://api.github.com/users/regiskuckaertz/repos","events_url":"https://api.github.com/users/regiskuckaertz/events{/privacy}","received_events_url":"https://api.github.com/users/regiskuckaertz/received_events","type":"User","site_admin":false},"body":"In this case, I'm only interested to know whether the promise is complete or not: and `poll` fails in the latter case, which means I can run provide an alternative action (update the state) with the `<>` combinator.","created_at":"2018-10-19T09:48:29Z","updated_at":"2018-10-19T09:48:29Z","html_url":"https://github.com/scalaz/scalaz-zio/pull/302#discussion_r226591329","pull_request_url":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/302","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/comments/226591329"},"html":{"href":"https://github.com/scalaz/scalaz-zio/pull/302#discussion_r226591329"},"pull_request":{"href":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/302"}},"in_reply_to_id":225721656},"pull_request":{"url":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/302","id":223334197,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIzMzM0MTk3","html_url":"https://github.com/scalaz/scalaz-zio/pull/302","diff_url":"https://github.com/scalaz/scalaz-zio/pull/302.diff","patch_url":"https://github.com/scalaz/scalaz-zio/pull/302.patch","issue_url":"https://api.github.com/repos/scalaz/scalaz-zio/issues/302","number":302,"state":"open","locked":false,"title":"Semaphores revisited","user":{"login":"regiskuckaertz","id":629976,"node_id":"MDQ6VXNlcjYyOTk3Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/629976?v=4","gravatar_id":"","url":"https://api.github.com/users/regiskuckaertz","html_url":"https://github.com/regiskuckaertz","followers_url":"https://api.github.com/users/regiskuckaertz/followers","following_url":"https://api.github.com/users/regiskuckaertz/following{/other_user}","gists_url":"https://api.github.com/users/regiskuckaertz/gists{/gist_id}","starred_url":"https://api.github.com/users/regiskuckaertz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/regiskuckaertz/subscriptions","organizations_url":"https://api.github.com/users/regiskuckaertz/orgs","repos_url":"https://api.github.com/users/regiskuckaertz/repos","events_url":"https://api.github.com/users/regiskuckaertz/events{/privacy}","received_events_url":"https://api.github.com/users/regiskuckaertz/received_events","type":"User","site_admin":false},"body":"Closes #293 \r\n\r\nI feel this version is more in line with the style we use elsewhere and also much easier to read. And I think now I understand `Promise.bracket`, even though I don't really need its full power (i.e. the `release` action).","created_at":"2018-10-16T17:28:00Z","updated_at":"2018-10-19T09:48:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"16a94c52296df9d0137a0056e2f9dc9d6ed4b76b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/302/commits","review_comments_url":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/302/comments","review_comment_url":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scalaz/scalaz-zio/issues/302/comments","statuses_url":"https://api.github.com/repos/scalaz/scalaz-zio/statuses/fd801ad4263d7108c88a9a85d2e48989632ef81d","head":{"label":"regiskuckaertz:rk-semaphore","ref":"rk-semaphore","sha":"fd801ad4263d7108c88a9a85d2e48989632ef81d","user":{"login":"regiskuckaertz","id":629976,"node_id":"MDQ6VXNlcjYyOTk3Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/629976?v=4","gravatar_id":"","url":"https://api.github.com/users/regiskuckaertz","html_url":"https://github.com/regiskuckaertz","followers_url":"https://api.github.com/users/regiskuckaertz/followers","following_url":"https://api.github.com/users/regiskuckaertz/following{/other_user}","gists_url":"https://api.github.com/users/regiskuckaertz/gists{/gist_id}","starred_url":"https://api.github.com/users/regiskuckaertz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/regiskuckaertz/subscriptions","organizations_url":"https://api.github.com/users/regiskuckaertz/orgs","repos_url":"https://api.github.com/users/regiskuckaertz/repos","events_url":"https://api.github.com/users/regiskuckaertz/events{/privacy}","received_events_url":"https://api.github.com/users/regiskuckaertz/received_events","type":"User","site_admin":false},"repo":{"id":136933794,"node_id":"MDEwOlJlcG9zaXRvcnkxMzY5MzM3OTQ=","name":"scalaz-zio","full_name":"regiskuckaertz/scalaz-zio","private":false,"owner":{"login":"regiskuckaertz","id":629976,"node_id":"MDQ6VXNlcjYyOTk3Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/629976?v=4","gravatar_id":"","url":"https://api.github.com/users/regiskuckaertz","html_url":"https://github.com/regiskuckaertz","followers_url":"https://api.github.com/users/regiskuckaertz/followers","following_url":"https://api.github.com/users/regiskuckaertz/following{/other_user}","gists_url":"https://api.github.com/users/regiskuckaertz/gists{/gist_id}","starred_url":"https://api.github.com/users/regiskuckaertz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/regiskuckaertz/subscriptions","organizations_url":"https://api.github.com/users/regiskuckaertz/orgs","repos_url":"https://api.github.com/users/regiskuckaertz/repos","events_url":"https://api.github.com/users/regiskuckaertz/events{/privacy}","received_events_url":"https://api.github.com/users/regiskuckaertz/received_events","type":"User","site_admin":false},"html_url":"https://github.com/regiskuckaertz/scalaz-zio","description":"ZIO — A principled, powerful, standalone effect data type for any Scala project.","fork":true,"url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio","forks_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/forks","keys_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/teams","hooks_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/hooks","issue_events_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/issues/events{/number}","events_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/events","assignees_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/assignees{/user}","branches_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/branches{/branch}","tags_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/tags","blobs_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/git/refs{/sha}","trees_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/statuses/{sha}","languages_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/languages","stargazers_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/stargazers","contributors_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/contributors","subscribers_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/subscribers","subscription_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/subscription","commits_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/commits{/sha}","git_commits_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/git/commits{/sha}","comments_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/comments{/number}","issue_comment_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/issues/comments{/number}","contents_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/contents/{+path}","compare_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/merges","archive_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/downloads","issues_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/issues{/number}","pulls_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/pulls{/number}","milestones_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/milestones{/number}","notifications_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/labels{/name}","releases_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/releases{/id}","deployments_url":"https://api.github.com/repos/regiskuckaertz/scalaz-zio/deployments","created_at":"2018-06-11T13:57:11Z","updated_at":"2018-10-13T15:22:08Z","pushed_at":"2018-10-16T19:32:47Z","git_url":"git://github.com/regiskuckaertz/scalaz-zio.git","ssh_url":"git@github.com:regiskuckaertz/scalaz-zio.git","clone_url":"https://github.com/regiskuckaertz/scalaz-zio.git","svn_url":"https://github.com/regiskuckaertz/scalaz-zio","homepage":"","size":1226,"stargazers_count":0,"watchers_count":0,"language":"Scala","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"scalaz:master","ref":"master","sha":"c56e41b9daa532aebac792c0a61ba8ded795f0ce","user":{"login":"scalaz","id":183416,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE4MzQxNg==","avatar_url":"https://avatars0.githubusercontent.com/u/183416?v=4","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":134079884,"node_id":"MDEwOlJlcG9zaXRvcnkxMzQwNzk4ODQ=","name":"scalaz-zio","full_name":"scalaz/scalaz-zio","private":false,"owner":{"login":"scalaz","id":183416,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE4MzQxNg==","avatar_url":"https://avatars0.githubusercontent.com/u/183416?v=4","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},"html_url":"https://github.com/scalaz/scalaz-zio","description":"ZIO — A principled, powerful, standalone effect data type for any Scala project.","fork":false,"url":"https://api.github.com/repos/scalaz/scalaz-zio","forks_url":"https://api.github.com/repos/scalaz/scalaz-zio/forks","keys_url":"https://api.github.com/repos/scalaz/scalaz-zio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scalaz/scalaz-zio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scalaz/scalaz-zio/teams","hooks_url":"https://api.github.com/repos/scalaz/scalaz-zio/hooks","issue_events_url":"https://api.github.com/repos/scalaz/scalaz-zio/issues/events{/number}","events_url":"https://api.github.com/repos/scalaz/scalaz-zio/events","assignees_url":"https://api.github.com/repos/scalaz/scalaz-zio/assignees{/user}","branches_url":"https://api.github.com/repos/scalaz/scalaz-zio/branches{/branch}","tags_url":"https://api.github.com/repos/scalaz/scalaz-zio/tags","blobs_url":"https://api.github.com/repos/scalaz/scalaz-zio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scalaz/scalaz-zio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scalaz/scalaz-zio/git/refs{/sha}","trees_url":"https://api.github.com/repos/scalaz/scalaz-zio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scalaz/scalaz-zio/statuses/{sha}","languages_url":"https://api.github.com/repos/scalaz/scalaz-zio/languages","stargazers_url":"https://api.github.com/repos/scalaz/scalaz-zio/stargazers","contributors_url":"https://api.github.com/repos/scalaz/scalaz-zio/contributors","subscribers_url":"https://api.github.com/repos/scalaz/scalaz-zio/subscribers","subscription_url":"https://api.github.com/repos/scalaz/scalaz-zio/subscription","commits_url":"https://api.github.com/repos/scalaz/scalaz-zio/commits{/sha}","git_commits_url":"https://api.github.com/repos/scalaz/scalaz-zio/git/commits{/sha}","comments_url":"https://api.github.com/repos/scalaz/scalaz-zio/comments{/number}","issue_comment_url":"https://api.github.com/repos/scalaz/scalaz-zio/issues/comments{/number}","contents_url":"https://api.github.com/repos/scalaz/scalaz-zio/contents/{+path}","compare_url":"https://api.github.com/repos/scalaz/scalaz-zio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scalaz/scalaz-zio/merges","archive_url":"https://api.github.com/repos/scalaz/scalaz-zio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scalaz/scalaz-zio/downloads","issues_url":"https://api.github.com/repos/scalaz/scalaz-zio/issues{/number}","pulls_url":"https://api.github.com/repos/scalaz/scalaz-zio/pulls{/number}","milestones_url":"https://api.github.com/repos/scalaz/scalaz-zio/milestones{/number}","notifications_url":"https://api.github.com/repos/scalaz/scalaz-zio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scalaz/scalaz-zio/labels{/name}","releases_url":"https://api.github.com/repos/scalaz/scalaz-zio/releases{/id}","deployments_url":"https://api.github.com/repos/scalaz/scalaz-zio/deployments","created_at":"2018-05-19T16:40:37Z","updated_at":"2018-10-19T06:22:16Z","pushed_at":"2018-10-19T09:35:06Z","git_url":"git://github.com/scalaz/scalaz-zio.git","ssh_url":"git@github.com:scalaz/scalaz-zio.git","clone_url":"https://github.com/scalaz/scalaz-zio.git","svn_url":"https://github.com/scalaz/scalaz-zio","homepage":"https://scalaz.github.io/scalaz-zio/","size":1926,"stargazers_count":381,"watchers_count":381,"language":"Scala","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":103,"mirror_url":null,"archived":false,"open_issues_count":57,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":103,"open_issues":57,"watchers":381,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/302"},"html":{"href":"https://github.com/scalaz/scalaz-zio/pull/302"},"issue":{"href":"https://api.github.com/repos/scalaz/scalaz-zio/issues/302"},"comments":{"href":"https://api.github.com/repos/scalaz/scalaz-zio/issues/302/comments"},"review_comments":{"href":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/302/comments"},"review_comment":{"href":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scalaz/scalaz-zio/pulls/302/commits"},"statuses":{"href":"https://api.github.com/repos/scalaz/scalaz-zio/statuses/fd801ad4263d7108c88a9a85d2e48989632ef81d"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"regiskuckaertz"}}