{"action":"created","comment":{"url":"https://api.github.com/repos/scalaz/scalaz/pulls/comments/211810772","pull_request_review_id":148310872,"id":211810772,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMTgxMDc3Mg==","diff_hunk":"@@ -49,3 +41,23 @@ for {\n   y <- k\n } yield x * y\n ```\n+\n+# Law\n+\n+A monad instance needs to satisfy the monad law stating `pure` is a right\n+identity for `flatMap`, in addition to those defined by\n+[`Applicative`](./Applicative.html) and [`Bind`](./Bind.html):\n+\n+```tut\n+  def bindIdentity[F[_], A, T](in: F[A])(assert: (F[A], F[A]) => T)(implicit F: Monad[F]) =\n+    assert(in, F.flatMap(in)(F.pure))\n+```\n+\n+That is to say; `pure` is an identity for `flatMap`,\n+in a similar way to how it's an identity for `ap`.\n+\n+The \"left identity law\" is guaranteed by parametricity and the right identity law:","path":"microsite/src/main/tut/typeclass/Monad.md","position":41,"original_position":41,"commit_id":"fe0979cbd92c0701dd563b69389ccce2980f2da0","original_commit_id":"fe0979cbd92c0701dd563b69389ccce2980f2da0","user":{"login":"alexknvl","id":559086,"node_id":"MDQ6VXNlcjU1OTA4Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/559086?v=4","gravatar_id":"","url":"https://api.github.com/users/alexknvl","html_url":"https://github.com/alexknvl","followers_url":"https://api.github.com/users/alexknvl/followers","following_url":"https://api.github.com/users/alexknvl/following{/other_user}","gists_url":"https://api.github.com/users/alexknvl/gists{/gist_id}","starred_url":"https://api.github.com/users/alexknvl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexknvl/subscriptions","organizations_url":"https://api.github.com/users/alexknvl/orgs","repos_url":"https://api.github.com/users/alexknvl/repos","events_url":"https://api.github.com/users/alexknvl/events{/privacy}","received_events_url":"https://api.github.com/users/alexknvl/received_events","type":"User","site_admin":false},"body":"This is a non-trivial fact. Is there a proof somewhere?","created_at":"2018-08-22T02:00:44Z","updated_at":"2018-08-22T02:02:37Z","html_url":"https://github.com/scalaz/scalaz/pull/1947#discussion_r211810772","pull_request_url":"https://api.github.com/repos/scalaz/scalaz/pulls/1947","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/comments/211810772"},"html":{"href":"https://github.com/scalaz/scalaz/pull/1947#discussion_r211810772"},"pull_request":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/1947"}}},"pull_request":{"url":"https://api.github.com/repos/scalaz/scalaz/pulls/1947","id":207456552,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA3NDU2NTUy","html_url":"https://github.com/scalaz/scalaz/pull/1947","diff_url":"https://github.com/scalaz/scalaz/pull/1947.diff","patch_url":"https://github.com/scalaz/scalaz/pull/1947.patch","issue_url":"https://api.github.com/repos/scalaz/scalaz/issues/1947","number":1947,"state":"open","locked":false,"title":"Law docs","user":{"login":"edmundnoble","id":1369693,"node_id":"MDQ6VXNlcjEzNjk2OTM=","avatar_url":"https://avatars3.githubusercontent.com/u/1369693?v=4","gravatar_id":"","url":"https://api.github.com/users/edmundnoble","html_url":"https://github.com/edmundnoble","followers_url":"https://api.github.com/users/edmundnoble/followers","following_url":"https://api.github.com/users/edmundnoble/following{/other_user}","gists_url":"https://api.github.com/users/edmundnoble/gists{/gist_id}","starred_url":"https://api.github.com/users/edmundnoble/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edmundnoble/subscriptions","organizations_url":"https://api.github.com/users/edmundnoble/orgs","repos_url":"https://api.github.com/users/edmundnoble/repos","events_url":"https://api.github.com/users/edmundnoble/events{/privacy}","received_events_url":"https://api.github.com/users/edmundnoble/received_events","type":"User","site_admin":false},"body":"Depends on #1939.\r\n\r\nSome documentation for laws; not complete by any means, but a good start, though review is very appreciated. Some things in Laws.md are probably redundant, some laws are probably undocumented.","created_at":"2018-08-09T22:02:19Z","updated_at":"2018-08-22T02:02:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ac384edc4e02a0b3b9a7d7352d1a3cf9be7609e0","assignee":{"login":"alexknvl","id":559086,"node_id":"MDQ6VXNlcjU1OTA4Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/559086?v=4","gravatar_id":"","url":"https://api.github.com/users/alexknvl","html_url":"https://github.com/alexknvl","followers_url":"https://api.github.com/users/alexknvl/followers","following_url":"https://api.github.com/users/alexknvl/following{/other_user}","gists_url":"https://api.github.com/users/alexknvl/gists{/gist_id}","starred_url":"https://api.github.com/users/alexknvl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexknvl/subscriptions","organizations_url":"https://api.github.com/users/alexknvl/orgs","repos_url":"https://api.github.com/users/alexknvl/repos","events_url":"https://api.github.com/users/alexknvl/events{/privacy}","received_events_url":"https://api.github.com/users/alexknvl/received_events","type":"User","site_admin":false},"assignees":[{"login":"alexknvl","id":559086,"node_id":"MDQ6VXNlcjU1OTA4Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/559086?v=4","gravatar_id":"","url":"https://api.github.com/users/alexknvl","html_url":"https://github.com/alexknvl","followers_url":"https://api.github.com/users/alexknvl/followers","following_url":"https://api.github.com/users/alexknvl/following{/other_user}","gists_url":"https://api.github.com/users/alexknvl/gists{/gist_id}","starred_url":"https://api.github.com/users/alexknvl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexknvl/subscriptions","organizations_url":"https://api.github.com/users/alexknvl/orgs","repos_url":"https://api.github.com/users/alexknvl/repos","events_url":"https://api.github.com/users/alexknvl/events{/privacy}","received_events_url":"https://api.github.com/users/alexknvl/received_events","type":"User","site_admin":false},{"login":"NeQuissimus","id":628342,"node_id":"MDQ6VXNlcjYyODM0Mg==","avatar_url":"https://avatars0.githubusercontent.com/u/628342?v=4","gravatar_id":"","url":"https://api.github.com/users/NeQuissimus","html_url":"https://github.com/NeQuissimus","followers_url":"https://api.github.com/users/NeQuissimus/followers","following_url":"https://api.github.com/users/NeQuissimus/following{/other_user}","gists_url":"https://api.github.com/users/NeQuissimus/gists{/gist_id}","starred_url":"https://api.github.com/users/NeQuissimus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NeQuissimus/subscriptions","organizations_url":"https://api.github.com/users/NeQuissimus/orgs","repos_url":"https://api.github.com/users/NeQuissimus/repos","events_url":"https://api.github.com/users/NeQuissimus/events{/privacy}","received_events_url":"https://api.github.com/users/NeQuissimus/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":385574322,"node_id":"MDU6TGFiZWwzODU1NzQzMjI=","url":"https://api.github.com/repos/scalaz/scalaz/labels/scalaz8","name":"scalaz8","color":"fbca04","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/scalaz/scalaz/pulls/1947/commits","review_comments_url":"https://api.github.com/repos/scalaz/scalaz/pulls/1947/comments","review_comment_url":"https://api.github.com/repos/scalaz/scalaz/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scalaz/scalaz/issues/1947/comments","statuses_url":"https://api.github.com/repos/scalaz/scalaz/statuses/fe0979cbd92c0701dd563b69389ccce2980f2da0","head":{"label":"edmundnoble:law-docs","ref":"law-docs","sha":"fe0979cbd92c0701dd563b69389ccce2980f2da0","user":{"login":"edmundnoble","id":1369693,"node_id":"MDQ6VXNlcjEzNjk2OTM=","avatar_url":"https://avatars3.githubusercontent.com/u/1369693?v=4","gravatar_id":"","url":"https://api.github.com/users/edmundnoble","html_url":"https://github.com/edmundnoble","followers_url":"https://api.github.com/users/edmundnoble/followers","following_url":"https://api.github.com/users/edmundnoble/following{/other_user}","gists_url":"https://api.github.com/users/edmundnoble/gists{/gist_id}","starred_url":"https://api.github.com/users/edmundnoble/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edmundnoble/subscriptions","organizations_url":"https://api.github.com/users/edmundnoble/orgs","repos_url":"https://api.github.com/users/edmundnoble/repos","events_url":"https://api.github.com/users/edmundnoble/events{/privacy}","received_events_url":"https://api.github.com/users/edmundnoble/received_events","type":"User","site_admin":false},"repo":{"id":37350554,"node_id":"MDEwOlJlcG9zaXRvcnkzNzM1MDU1NA==","name":"scalaz","full_name":"edmundnoble/scalaz","owner":{"login":"edmundnoble","id":1369693,"node_id":"MDQ6VXNlcjEzNjk2OTM=","avatar_url":"https://avatars3.githubusercontent.com/u/1369693?v=4","gravatar_id":"","url":"https://api.github.com/users/edmundnoble","html_url":"https://github.com/edmundnoble","followers_url":"https://api.github.com/users/edmundnoble/followers","following_url":"https://api.github.com/users/edmundnoble/following{/other_user}","gists_url":"https://api.github.com/users/edmundnoble/gists{/gist_id}","starred_url":"https://api.github.com/users/edmundnoble/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edmundnoble/subscriptions","organizations_url":"https://api.github.com/users/edmundnoble/orgs","repos_url":"https://api.github.com/users/edmundnoble/repos","events_url":"https://api.github.com/users/edmundnoble/events{/privacy}","received_events_url":"https://api.github.com/users/edmundnoble/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/edmundnoble/scalaz","description":"An extension to the core Scala library for functional programming.","fork":true,"url":"https://api.github.com/repos/edmundnoble/scalaz","forks_url":"https://api.github.com/repos/edmundnoble/scalaz/forks","keys_url":"https://api.github.com/repos/edmundnoble/scalaz/keys{/key_id}","collaborators_url":"https://api.github.com/repos/edmundnoble/scalaz/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/edmundnoble/scalaz/teams","hooks_url":"https://api.github.com/repos/edmundnoble/scalaz/hooks","issue_events_url":"https://api.github.com/repos/edmundnoble/scalaz/issues/events{/number}","events_url":"https://api.github.com/repos/edmundnoble/scalaz/events","assignees_url":"https://api.github.com/repos/edmundnoble/scalaz/assignees{/user}","branches_url":"https://api.github.com/repos/edmundnoble/scalaz/branches{/branch}","tags_url":"https://api.github.com/repos/edmundnoble/scalaz/tags","blobs_url":"https://api.github.com/repos/edmundnoble/scalaz/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/edmundnoble/scalaz/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/edmundnoble/scalaz/git/refs{/sha}","trees_url":"https://api.github.com/repos/edmundnoble/scalaz/git/trees{/sha}","statuses_url":"https://api.github.com/repos/edmundnoble/scalaz/statuses/{sha}","languages_url":"https://api.github.com/repos/edmundnoble/scalaz/languages","stargazers_url":"https://api.github.com/repos/edmundnoble/scalaz/stargazers","contributors_url":"https://api.github.com/repos/edmundnoble/scalaz/contributors","subscribers_url":"https://api.github.com/repos/edmundnoble/scalaz/subscribers","subscription_url":"https://api.github.com/repos/edmundnoble/scalaz/subscription","commits_url":"https://api.github.com/repos/edmundnoble/scalaz/commits{/sha}","git_commits_url":"https://api.github.com/repos/edmundnoble/scalaz/git/commits{/sha}","comments_url":"https://api.github.com/repos/edmundnoble/scalaz/comments{/number}","issue_comment_url":"https://api.github.com/repos/edmundnoble/scalaz/issues/comments{/number}","contents_url":"https://api.github.com/repos/edmundnoble/scalaz/contents/{+path}","compare_url":"https://api.github.com/repos/edmundnoble/scalaz/compare/{base}...{head}","merges_url":"https://api.github.com/repos/edmundnoble/scalaz/merges","archive_url":"https://api.github.com/repos/edmundnoble/scalaz/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/edmundnoble/scalaz/downloads","issues_url":"https://api.github.com/repos/edmundnoble/scalaz/issues{/number}","pulls_url":"https://api.github.com/repos/edmundnoble/scalaz/pulls{/number}","milestones_url":"https://api.github.com/repos/edmundnoble/scalaz/milestones{/number}","notifications_url":"https://api.github.com/repos/edmundnoble/scalaz/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/edmundnoble/scalaz/labels{/name}","releases_url":"https://api.github.com/repos/edmundnoble/scalaz/releases{/id}","deployments_url":"https://api.github.com/repos/edmundnoble/scalaz/deployments","created_at":"2015-06-13T00:07:25Z","updated_at":"2017-02-03T02:40:29Z","pushed_at":"2018-08-21T01:12:44Z","git_url":"git://github.com/edmundnoble/scalaz.git","ssh_url":"git@github.com:edmundnoble/scalaz.git","clone_url":"https://github.com/edmundnoble/scalaz.git","svn_url":"https://github.com/edmundnoble/scalaz","homepage":"","size":96438,"stargazers_count":2,"watchers_count":2,"language":"Scala","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":1,"watchers":2,"default_branch":"series/7.2.x"}},"base":{"label":"scalaz:series/8.0.x","ref":"series/8.0.x","sha":"687a1a4b6639fc0be884d917486ac1bd042c1c43","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":474633,"node_id":"MDEwOlJlcG9zaXRvcnk0NzQ2MzM=","name":"scalaz","full_name":"scalaz/scalaz","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},"private":false,"html_url":"https://github.com/scalaz/scalaz","description":"Principled Functional Programming in Scala","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":"2018-08-21T16:23:39Z","pushed_at":"2018-08-21T09:08:30Z","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":"https://scalaz.github.io/","size":98237,"stargazers_count":3828,"watchers_count":3828,"language":"Scala","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":647,"mirror_url":null,"archived":false,"open_issues_count":179,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":647,"open_issues":179,"watchers":3828,"default_branch":"series/7.3.x"}},"_links":{"self":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/1947"},"html":{"href":"https://github.com/scalaz/scalaz/pull/1947"},"issue":{"href":"https://api.github.com/repos/scalaz/scalaz/issues/1947"},"comments":{"href":"https://api.github.com/repos/scalaz/scalaz/issues/1947/comments"},"review_comments":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/1947/comments"},"review_comment":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scalaz/scalaz/pulls/1947/commits"},"statuses":{"href":"https://api.github.com/repos/scalaz/scalaz/statuses/fe0979cbd92c0701dd563b69389ccce2980f2da0"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"alexknvl"}}