{"action":"opened","issue":{"url":"https://api.github.com/repos/haskell/cabal/issues/3680","repository_url":"https://api.github.com/repos/haskell/cabal","labels_url":"https://api.github.com/repos/haskell/cabal/issues/3680/labels{/name}","comments_url":"https://api.github.com/repos/haskell/cabal/issues/3680/comments","events_url":"https://api.github.com/repos/haskell/cabal/issues/3680/events","html_url":"https://github.com/haskell/cabal/issues/3680","id":169816891,"number":3680,"title":"ComponentDeps [a] -> ComponentDeps (Set a)","user":{"login":"ezyang","id":13564,"avatar_url":"https://avatars.githubusercontent.com/u/13564?v=3","gravatar_id":"","url":"https://api.github.com/users/ezyang","html_url":"https://github.com/ezyang","followers_url":"https://api.github.com/users/ezyang/followers","following_url":"https://api.github.com/users/ezyang/following{/other_user}","gists_url":"https://api.github.com/users/ezyang/gists{/gist_id}","starred_url":"https://api.github.com/users/ezyang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezyang/subscriptions","organizations_url":"https://api.github.com/users/ezyang/orgs","repos_url":"https://api.github.com/users/ezyang/repos","events_url":"https://api.github.com/users/ezyang/events{/privacy}","received_events_url":"https://api.github.com/users/ezyang/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/haskell/cabal/labels/type:%20discussion","name":"type: discussion","color":"e99695"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2016-08-07T21:20:39Z","updated_at":"2016-08-07T21:20:39Z","closed_at":null,"body":"In https://github.com/haskell/cabal/pull/3662/commits/143218e68ace76beeb8c16afad36510fd41a12bf it was observed that, in some cases, we rely on the output of `CD.flatDeps` having no duplicates. The logical conclusion was that in many cases when we have `ComponentDeps [a]`, we should have `ComponentDeps (Set a)`.\r\n\r\nBut there was trouble: I couldn't figure out when to make the switch. Should the solver also deal in Sets of component deps? (This seems bad.) Or is this an invariant we start enforcing once we get to the install plan universe? The code mostly seems good at avoiding duplicates; the primary trouble is `CD.flatDeps` which combines possibly overlapping dependencies together. Maybe we really shouldn't assume non-duplicates? Unclear how to proceed, not blocking any features, so I punted.\r\n\r\nCC @dcoutts, @edsko "}}
{"actor":{"display_login":"ezyang"}}