{"action":"created","issue":{"url":"https://api.github.com/repos/rust-lang/rust/issues/23980","labels_url":"https://api.github.com/repos/rust-lang/rust/issues/23980/labels{/name}","comments_url":"https://api.github.com/repos/rust-lang/rust/issues/23980/comments","events_url":"https://api.github.com/repos/rust-lang/rust/issues/23980/events","html_url":"https://github.com/rust-lang/rust/issues/23980","id":66008931,"number":23980,"title":"Coherence error messages can be inscrutable","user":{"login":"nikomatsakis","id":155238,"avatar_url":"https://avatars.githubusercontent.com/u/155238?v=3","gravatar_id":"","url":"https://api.github.com/users/nikomatsakis","html_url":"https://github.com/nikomatsakis","followers_url":"https://api.github.com/users/nikomatsakis/followers","following_url":"https://api.github.com/users/nikomatsakis/following{/other_user}","gists_url":"https://api.github.com/users/nikomatsakis/gists{/gist_id}","starred_url":"https://api.github.com/users/nikomatsakis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikomatsakis/subscriptions","organizations_url":"https://api.github.com/users/nikomatsakis/orgs","repos_url":"https://api.github.com/users/nikomatsakis/repos","events_url":"https://api.github.com/users/nikomatsakis/events{/privacy}","received_events_url":"https://api.github.com/users/nikomatsakis/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/rust-lang/rust/labels/A-diagnostics","name":"A-diagnostics","color":"d7e102"},{"url":"https://api.github.com/repos/rust-lang/rust/labels/P-high","name":"P-high","color":"eb6420"}],"state":"open","locked":false,"assignee":{"login":"nikomatsakis","id":155238,"avatar_url":"https://avatars.githubusercontent.com/u/155238?v=3","gravatar_id":"","url":"https://api.github.com/users/nikomatsakis","html_url":"https://github.com/nikomatsakis","followers_url":"https://api.github.com/users/nikomatsakis/followers","following_url":"https://api.github.com/users/nikomatsakis/following{/other_user}","gists_url":"https://api.github.com/users/nikomatsakis/gists{/gist_id}","starred_url":"https://api.github.com/users/nikomatsakis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikomatsakis/subscriptions","organizations_url":"https://api.github.com/users/nikomatsakis/orgs","repos_url":"https://api.github.com/users/nikomatsakis/repos","events_url":"https://api.github.com/users/nikomatsakis/events{/privacy}","received_events_url":"https://api.github.com/users/nikomatsakis/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/rust-lang/rust/milestones/20","html_url":"https://github.com/rust-lang/rust/milestones/1.0","labels_url":"https://api.github.com/repos/rust-lang/rust/milestones/20/labels","id":452034,"number":20,"title":"1.0","description":"This will be the first major release of Rust, where we offer some guaranteed level of support and backwards compatibility.\r\n\r\nThe significant criteria for this release are:\r\n\r\n* Language backwards compatibility - All major features are in, and in their final form. Generally, the only new language features added after this milestone must be backwards compatible, or to fix soundness holes, though we do expect to have some leeway to make small incompatible fixes that have low impact on existing code bases.\r\n\r\n* Library stability - We have a system of measuring and ensuring the stability of API's, and a significant portion of the standard library is declared stable. Stable API's will not change. Large portions of the standard library need to be stable for 1.0, including primitive types, vectors, strings, option, numerics, collections, some I/O and concurrency.\r\n\r\n* User experience - The system is polished and the presentation is complete and professional. New users have a clear path to using and learning the system. This encompasses the web site, documentation, installation, and tooling.\r\n","creator":{"login":"brson","id":147214,"avatar_url":"https://avatars.githubusercontent.com/u/147214?v=3","gravatar_id":"","url":"https://api.github.com/users/brson","html_url":"https://github.com/brson","followers_url":"https://api.github.com/users/brson/followers","following_url":"https://api.github.com/users/brson/following{/other_user}","gists_url":"https://api.github.com/users/brson/gists{/gist_id}","starred_url":"https://api.github.com/users/brson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brson/subscriptions","organizations_url":"https://api.github.com/users/brson/orgs","repos_url":"https://api.github.com/users/brson/repos","events_url":"https://api.github.com/users/brson/events{/privacy}","received_events_url":"https://api.github.com/users/brson/received_events","type":"User","site_admin":false},"open_issues":37,"closed_issues":350,"state":"open","created_at":"2013-10-10T18:48:33Z","updated_at":"2015-04-03T10:23:08Z","due_on":null,"closed_at":null},"comments":2,"created_at":"2015-04-02T20:48:28Z","updated_at":"2015-04-03T10:29:43Z","closed_at":null,"body":"In particular, when the overlap check fails, it doesn't give much clarity, particularly when the overlap is between impls in different crates. It should tell you:\r\n\r\n1. Precisely what type overlaps\r\n2. For each case of negative reasoning it was not able to make, why it was not able to make it.\r\n\r\n#2 might be a bit tricky to do, not sure, but we can certainly improve on current state of affairs.\r\n"},"comment":{"url":"https://api.github.com/repos/rust-lang/rust/issues/comments/89249421","html_url":"https://github.com/rust-lang/rust/issues/23980#issuecomment-89249421","issue_url":"https://api.github.com/repos/rust-lang/rust/issues/23980","id":89249421,"user":{"login":"nikomatsakis","id":155238,"avatar_url":"https://avatars.githubusercontent.com/u/155238?v=3","gravatar_id":"","url":"https://api.github.com/users/nikomatsakis","html_url":"https://github.com/nikomatsakis","followers_url":"https://api.github.com/users/nikomatsakis/followers","following_url":"https://api.github.com/users/nikomatsakis/following{/other_user}","gists_url":"https://api.github.com/users/nikomatsakis/gists{/gist_id}","starred_url":"https://api.github.com/users/nikomatsakis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikomatsakis/subscriptions","organizations_url":"https://api.github.com/users/nikomatsakis/orgs","repos_url":"https://api.github.com/users/nikomatsakis/repos","events_url":"https://api.github.com/users/nikomatsakis/events{/privacy}","received_events_url":"https://api.github.com/users/nikomatsakis/received_events","type":"User","site_admin":false},"created_at":"2015-04-03T10:29:43Z","updated_at":"2015-04-03T10:29:43Z","body":"@FlaPer87 is going to look into this as well. As a concrete first step, we want to print out the overlapping types, and not just cite impls. For example:\r\n\r\n```rust\r\n// crate A\r\ntrait Foo { }\r\nimpl<T> Foo for &T { }\r\n\r\n// crate B\r\nstruct MyType;\r\nimpl Foo for &MyType { } // X\r\n```\r\n\r\nThis would ideally print something like:\r\n- Multiple impls can be applied to `&MyType`\r\n  - First candidate is impl X, on line 123\r\n  - Second candidate is in crate A: `impl<T> Foo for &T`\r\n\r\nHowever, the last part is a bit tricky since the impl must be reconstructed from metadata, but we can start with even just printing `&MyType`. It's \"obvious\" from the impl decl (sort of...) once you know what's going on, but helpful to see it printed when you don't."}}