{"action":"created","issue":{"url":"https://api.github.com/repos/haskell/rfcs/issues/1","repository_url":"https://api.github.com/repos/haskell/rfcs","labels_url":"https://api.github.com/repos/haskell/rfcs/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/haskell/rfcs/issues/1/comments","events_url":"https://api.github.com/repos/haskell/rfcs/issues/1/events","html_url":"https://github.com/haskell/rfcs/pull/1","id":167062273,"node_id":"MDExOlB1bGxSZXF1ZXN0Nzg0ODkzOTk=","number":1,"title":"AMP (Applicative/Monad proposal)","user":{"login":"quchen","id":3020161,"node_id":"MDQ6VXNlcjMwMjAxNjE=","avatar_url":"https://avatars1.githubusercontent.com/u/3020161?v=4","gravatar_id":"","url":"https://api.github.com/users/quchen","html_url":"https://github.com/quchen","followers_url":"https://api.github.com/users/quchen/followers","following_url":"https://api.github.com/users/quchen/following{/other_user}","gists_url":"https://api.github.com/users/quchen/gists{/gist_id}","starred_url":"https://api.github.com/users/quchen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/quchen/subscriptions","organizations_url":"https://api.github.com/users/quchen/orgs","repos_url":"https://api.github.com/users/quchen/repos","events_url":"https://api.github.com/users/quchen/events{/privacy}","received_events_url":"https://api.github.com/users/quchen/received_events","type":"User","site_admin":false},"labels":[{"id":423697501,"node_id":"MDU6TGFiZWw0MjM2OTc1MDE=","url":"https://api.github.com/repos/haskell/rfcs/labels/::%20Core%20types","name":":: Core types","color":"bfdadc","default":false},{"id":422072259,"node_id":"MDU6TGFiZWw0MjIwNzIyNTk=","url":"https://api.github.com/repos/haskell/rfcs/labels/B%20-%20Breaking","name":"B - Breaking","color":"e99695","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":28,"created_at":"2016-07-22T14:49:34Z","updated_at":"2018-11-20T17:59:32Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/haskell/rfcs/pulls/1","html_url":"https://github.com/haskell/rfcs/pull/1","diff_url":"https://github.com/haskell/rfcs/pull/1.diff","patch_url":"https://github.com/haskell/rfcs/pull/1.patch"},"body":"Straight adaption of [the original proposal](https://github.com/quchen/articles/blob/master/applicative_monad.md).\n\nRendered version of this proposal: https://github.com/quchen/rfcs/blob/amp/texts/0000-applicative-monad-superclass.rst\n"},"comment":{"url":"https://api.github.com/repos/haskell/rfcs/issues/comments/440372451","html_url":"https://github.com/haskell/rfcs/pull/1#issuecomment-440372451","issue_url":"https://api.github.com/repos/haskell/rfcs/issues/1","id":440372451,"node_id":"MDEyOklzc3VlQ29tbWVudDQ0MDM3MjQ1MQ==","user":{"login":"cartazio","id":4290,"node_id":"MDQ6VXNlcjQyOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/4290?v=4","gravatar_id":"","url":"https://api.github.com/users/cartazio","html_url":"https://github.com/cartazio","followers_url":"https://api.github.com/users/cartazio/followers","following_url":"https://api.github.com/users/cartazio/following{/other_user}","gists_url":"https://api.github.com/users/cartazio/gists{/gist_id}","starred_url":"https://api.github.com/users/cartazio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cartazio/subscriptions","organizations_url":"https://api.github.com/users/cartazio/orgs","repos_url":"https://api.github.com/users/cartazio/repos","events_url":"https://api.github.com/users/cartazio/events{/privacy}","received_events_url":"https://api.github.com/users/cartazio/received_events","type":"User","site_admin":false},"created_at":"2018-11-20T17:59:32Z","updated_at":"2018-11-20T17:59:32Z","author_association":"MEMBER","body":"Good points dan.\n\nI guess we’re going to have to layout the landscape of possible edits and\nbring the decision before the full language committee.\n\nI would like to remind folks that in some directions we have no authority\nover the decision making over CLC and GHC.  It’s a partnership.\n\nOn Tue, Nov 20, 2018 at 11:45 AM Dan Burton <notifications@github.com>\nwrote:\n\n> other Haskell compilers may choose not to have Applicative as a superclass\n> of Monad\n>\n> Yikes! That would mean that\n>\n> foo :: Monad m => m Int\n> foo = pure 3\n>\n> Would *not* be valid Haskell, according to the report. GHC already made\n> this move and I am strongly aligned with what the proposed: \"Whenever\n> there's Monad code, you can use Functor/Applicative functions, without\n> introducing an additional constraint.\"\n>\n> The redundant functions (like return) are all well and good in an\n> implementation such as GHC, but I think they should be struck from the\n> Report. Let's design it like we should have from the beginning, cleanly.\n>\n> I am in favor of this instead. Strike return from the report, consider a\n> deprecation cycle for it in ghc. Or keep return in the report for\n> language backwards-compatibility with the previous report, but indicate in\n> the report that it is a legacy artifact.\n>\n> For this, the proposal says 'With the new hierarchy, the answer would\n> always be “use the least restrictive one”.' This is ok, but what would be\n> better is to have an actual deprecation cycle, so that we eventually arrive\n> at always using fmap, and having liftA and liftM not exist anymore, etc.\n>\n> As for the inconvenience of having to define instances, I think requiring\n> users to use explicit definitions comparable to fmapDefault is not so bad.\n>\n> instance Functor F where\n>    fmap = ...\n> instance Applicative F where\n>    pure = ...\n>    (<*>) = apMonadDefault\n> instance Monad F where\n>   join = ...\n>\n> instance Functor G where\n>   fmap = fmapMonadDefault\n> instance Applicative G where\n>   pure = ...\n>   (<*>) = apMonadDefault\n> instance Monad F where\n>   (>>=) = ...\n>\n> A code linter could check to make sure you're not using fmapMonadDefault\n> to define fmap cyclically (since the default impl of >>= is in terms of\n> fmap and join, and fmapMonadDefault f m = m >>= pure . f ).\n>\n> I would prefer (<*>) = apMonadDefault to be implicit, but I understand if\n> there are reasons not to do so.\n>\n> —\n> You are receiving this because you commented.\n>\n>\n> Reply to this email directly, view it on GitHub\n> <https://github.com/haskell/rfcs/pull/1#issuecomment-440343126>, or mute\n> the thread\n> <https://github.com/notifications/unsubscribe-auth/AAAQwoTa2QxiDBVwpY1bP8tNFkuqyiVLks5uxDHFgaJpZM4JS1Lq>\n> .\n>\n"}}
{"actor":{"display_login":"cartazio"}}