{"action":"created","issue":{"url":"https://api.github.com/repos/purescript/purescript-free/issues/43","labels_url":"https://api.github.com/repos/purescript/purescript-free/issues/43/labels{/name}","comments_url":"https://api.github.com/repos/purescript/purescript-free/issues/43/comments","events_url":"https://api.github.com/repos/purescript/purescript-free/issues/43/events","html_url":"https://github.com/purescript/purescript-free/pull/43","id":125612760,"number":43,"title":"Add MonadEff instance","user":{"login":"garyb","id":693642,"avatar_url":"https://avatars.githubusercontent.com/u/693642?v=3","gravatar_id":"","url":"https://api.github.com/users/garyb","html_url":"https://github.com/garyb","followers_url":"https://api.github.com/users/garyb/followers","following_url":"https://api.github.com/users/garyb/following{/other_user}","gists_url":"https://api.github.com/users/garyb/gists{/gist_id}","starred_url":"https://api.github.com/users/garyb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/garyb/subscriptions","organizations_url":"https://api.github.com/users/garyb/orgs","repos_url":"https://api.github.com/users/garyb/repos","events_url":"https://api.github.com/users/garyb/events{/privacy}","received_events_url":"https://api.github.com/users/garyb/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":4,"created_at":"2016-01-08T13:24:42Z","updated_at":"2016-01-08T15:32:03Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/purescript/purescript-free/pulls/43","html_url":"https://github.com/purescript/purescript-free/pull/43","diff_url":"https://github.com/purescript/purescript-free/pull/43.diff","patch_url":"https://github.com/purescript/purescript-free/pull/43.patch"},"body":"I know this was sort of covered by #31 before, but this instance would be super useful to have for Halogen.\n\nI understand the point that `f` is not necessarily a `Monad` (or `MonadEff` for that matter), but I’m not so sure I see why it’s a problem to provide the instance for the cases when it is, especially since it’s not possible to define instances like this anywhere else.\n\nWe do something similar with the `Monoid` newtypes: provide a bunch of instances for things that the underlying type might not be, but could be."},"comment":{"url":"https://api.github.com/repos/purescript/purescript-free/issues/comments/170032387","html_url":"https://github.com/purescript/purescript-free/pull/43#issuecomment-170032387","issue_url":"https://api.github.com/repos/purescript/purescript-free/issues/43","id":170032387,"user":{"login":"jdegoes","id":156745,"avatar_url":"https://avatars.githubusercontent.com/u/156745?v=3","gravatar_id":"","url":"https://api.github.com/users/jdegoes","html_url":"https://github.com/jdegoes","followers_url":"https://api.github.com/users/jdegoes/followers","following_url":"https://api.github.com/users/jdegoes/following{/other_user}","gists_url":"https://api.github.com/users/jdegoes/gists{/gist_id}","starred_url":"https://api.github.com/users/jdegoes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdegoes/subscriptions","organizations_url":"https://api.github.com/users/jdegoes/orgs","repos_url":"https://api.github.com/users/jdegoes/repos","events_url":"https://api.github.com/users/jdegoes/events{/privacy}","received_events_url":"https://api.github.com/users/jdegoes/received_events","type":"User","site_admin":false},"created_at":"2016-01-08T15:32:03Z","updated_at":"2016-01-08T15:32:03Z","body":"I have no real issue with adding this.\r\n\r\nThat said, perhaps the correct thing to do is to define `FunctorEff`, which has a `liftEff`, and then that becomes a superclass of `MonadEff`, which adds only the guarantee that the functor is also a monad. \r\n\r\nThen `Free` should definitely provide an instance of `FunctorEff`, which would allow lifting `Eff` into some functor that is not necessarily a monad (in practice, it probably would be)."}}