{"action":"created","issue":{"url":"https://api.github.com/repos/racket/racket/issues/1100","labels_url":"https://api.github.com/repos/racket/racket/issues/1100/labels{/name}","comments_url":"https://api.github.com/repos/racket/racket/issues/1100/comments","events_url":"https://api.github.com/repos/racket/racket/issues/1100/events","html_url":"https://github.com/racket/racket/pull/1100","id":113104397,"number":1100,"title":"Allow separate read and write contracts for box/c","user":{"login":"AlexKnauth","id":6600123,"avatar_url":"https://avatars.githubusercontent.com/u/6600123?v=3","gravatar_id":"","url":"https://api.github.com/users/AlexKnauth","html_url":"https://github.com/AlexKnauth","followers_url":"https://api.github.com/users/AlexKnauth/followers","following_url":"https://api.github.com/users/AlexKnauth/following{/other_user}","gists_url":"https://api.github.com/users/AlexKnauth/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexKnauth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexKnauth/subscriptions","organizations_url":"https://api.github.com/users/AlexKnauth/orgs","repos_url":"https://api.github.com/users/AlexKnauth/repos","events_url":"https://api.github.com/users/AlexKnauth/events{/privacy}","received_events_url":"https://api.github.com/users/AlexKnauth/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":4,"created_at":"2015-10-23T21:33:45Z","updated_at":"2015-10-23T23:45:32Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/racket/racket/pulls/1100","html_url":"https://github.com/racket/racket/pull/1100","diff_url":"https://github.com/racket/racket/pull/1100.diff","patch_url":"https://github.com/racket/racket/pull/1100.patch"},"body":"This allows `(box/c write-ctc read-ctc)` to specify that a write to a box goes through `write-ctc` and a read from the box goes through `read-ctc`. This allows box contracts that restrict mutation of the box. \r\n\r\nAlso, the `write-ctc` is contra-variant and the `read-ctc` is co-variant, so this means that a contract for the union of two mutable box types can be written using a more restrictive `write-ctc`, which is `and/c` of the two write-ctc contracts, and a less restrictive `read-ctc`, which is the `or/c` of the two read-ctc contracts."},"comment":{"url":"https://api.github.com/repos/racket/racket/issues/comments/150717963","html_url":"https://github.com/racket/racket/pull/1100#issuecomment-150717963","issue_url":"https://api.github.com/repos/racket/racket/issues/1100","id":150717963,"user":{"login":"rfindler","id":399024,"avatar_url":"https://avatars.githubusercontent.com/u/399024?v=3","gravatar_id":"","url":"https://api.github.com/users/rfindler","html_url":"https://github.com/rfindler","followers_url":"https://api.github.com/users/rfindler/followers","following_url":"https://api.github.com/users/rfindler/following{/other_user}","gists_url":"https://api.github.com/users/rfindler/gists{/gist_id}","starred_url":"https://api.github.com/users/rfindler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rfindler/subscriptions","organizations_url":"https://api.github.com/users/rfindler/orgs","repos_url":"https://api.github.com/users/rfindler/repos","events_url":"https://api.github.com/users/rfindler/events{/privacy}","received_events_url":"https://api.github.com/users/rfindler/received_events","type":"User","site_admin":false},"created_at":"2015-10-23T23:45:32Z","updated_at":"2015-10-23T23:45:32Z","body":"Re: deleting. I would say \"no minus signs in the diff for the testing\nfiles\".\n\nRe: stronger: yes. But we should try to make stronger work better. So if\nthere are missing cases we should fix them. Except we cannot do that for\npredicates (or only to a\nLimited extent). Is that the worry?\n\nBut if you don't like that plan then can you say what should happen when\nthe two contracts are legitimately incomparable? Like in the example? Is\nthat behavior actually right.\n"}}