{"action":"opened","issue":{"url":"https://api.github.com/repos/billpmurphy/hask/issues/2","labels_url":"https://api.github.com/repos/billpmurphy/hask/issues/2/labels{/name}","comments_url":"https://api.github.com/repos/billpmurphy/hask/issues/2/comments","events_url":"https://api.github.com/repos/billpmurphy/hask/issues/2/events","html_url":"https://github.com/billpmurphy/hask/issues/2","id":97825711,"number":2,"title":"Fix unification of higher-kinded types when performing type inference","user":{"login":"billpmurphy","id":1874654,"avatar_url":"https://avatars.githubusercontent.com/u/1874654?v=3","gravatar_id":"","url":"https://api.github.com/users/billpmurphy","html_url":"https://github.com/billpmurphy","followers_url":"https://api.github.com/users/billpmurphy/followers","following_url":"https://api.github.com/users/billpmurphy/following{/other_user}","gists_url":"https://api.github.com/users/billpmurphy/gists{/gist_id}","starred_url":"https://api.github.com/users/billpmurphy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/billpmurphy/subscriptions","organizations_url":"https://api.github.com/users/billpmurphy/orgs","repos_url":"https://api.github.com/users/billpmurphy/repos","events_url":"https://api.github.com/users/billpmurphy/events{/privacy}","received_events_url":"https://api.github.com/users/billpmurphy/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/billpmurphy/hask/labels/bug","name":"bug","color":"fc2929"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-07-28T23:53:58Z","updated_at":"2015-07-28T23:53:58Z","closed_at":null,"body":"Related to #1, the type system does not unify higher-kinded types correctly, as it ignores kind when unifying, so a `TypeVariable` like `m a` currently unifies with a type like `Either int str`. This was done tso that typeclasses could be quickly grafted onto the type system; unlike in Haskell, where a partially-applied HKT can be a member of a typeclass (e.g., `Either a` is a member of `Monad`), here the HKT object itself is always a member. This is a temporary hack and should be corrected."}}