{"action":"created","issue":{"url":"https://api.github.com/repos/raisemarketplace/redux-loop/issues/26","repository_url":"https://api.github.com/repos/raisemarketplace/redux-loop","labels_url":"https://api.github.com/repos/raisemarketplace/redux-loop/issues/26/labels{/name}","comments_url":"https://api.github.com/repos/raisemarketplace/redux-loop/issues/26/comments","events_url":"https://api.github.com/repos/raisemarketplace/redux-loop/issues/26/events","html_url":"https://github.com/raisemarketplace/redux-loop/issues/26","id":138718237,"number":26,"title":"Expose `liftReducer` and/or `liftState`","user":{"login":"mxdubois","id":1776075,"avatar_url":"https://avatars.githubusercontent.com/u/1776075?v=3","gravatar_id":"","url":"https://api.github.com/users/mxdubois","html_url":"https://github.com/mxdubois","followers_url":"https://api.github.com/users/mxdubois/followers","following_url":"https://api.github.com/users/mxdubois/following{/other_user}","gists_url":"https://api.github.com/users/mxdubois/gists{/gist_id}","starred_url":"https://api.github.com/users/mxdubois/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxdubois/subscriptions","organizations_url":"https://api.github.com/users/mxdubois/orgs","repos_url":"https://api.github.com/users/mxdubois/repos","events_url":"https://api.github.com/users/mxdubois/events{/privacy}","received_events_url":"https://api.github.com/users/mxdubois/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2016-03-05T20:35:41Z","updated_at":"2016-03-05T20:48:21Z","closed_at":null,"body":"Hey. I'm trying out the library and the first issue I've encountered is that some actions produce effects and others don't, which means my reducer returns inconsistent structures. I'd like to be able to normalize that for testing.\r\n\r\nI see you've solved this problem internally with `liftReducer` / `liftState`. It'd be great to have access to those in my application/tests.\r\n\r\nFor my own sanity, I could see myself normalizing them upfront like this:\r\n\r\n```javascript\r\nimport { Effects, loop, liftReducer: liftReducerToLooper } from 'redux-loop';\r\n// ...\r\nexport const reducer = liftReducerToLooper(createReducer({\r\n  [FOO_ACTION]: (state, action) => {\r\n    return {...state, foo: 'bar' };\r\n  },\r\n  [EFFECTING_ACTION]: (state, action) => { \r\n     return loop(state, Effects.promise(someFn));\r\n  },\r\n}, initialState));\r\n```\r\n\r\nWhat do you think? I know there's always a tension between minimal surface area and convenience."},"comment":{"url":"https://api.github.com/repos/raisemarketplace/redux-loop/issues/comments/192732292","html_url":"https://github.com/raisemarketplace/redux-loop/issues/26#issuecomment-192732292","issue_url":"https://api.github.com/repos/raisemarketplace/redux-loop/issues/26","id":192732292,"user":{"login":"mxdubois","id":1776075,"avatar_url":"https://avatars.githubusercontent.com/u/1776075?v=3","gravatar_id":"","url":"https://api.github.com/users/mxdubois","html_url":"https://github.com/mxdubois","followers_url":"https://api.github.com/users/mxdubois/followers","following_url":"https://api.github.com/users/mxdubois/following{/other_user}","gists_url":"https://api.github.com/users/mxdubois/gists{/gist_id}","starred_url":"https://api.github.com/users/mxdubois/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxdubois/subscriptions","organizations_url":"https://api.github.com/users/mxdubois/orgs","repos_url":"https://api.github.com/users/mxdubois/repos","events_url":"https://api.github.com/users/mxdubois/events{/privacy}","received_events_url":"https://api.github.com/users/mxdubois/received_events","type":"User","site_admin":false},"created_at":"2016-03-05T20:48:21Z","updated_at":"2016-03-05T20:48:21Z","body":"Actually, upon second glance, it looks like I actually want something more like `compose(liftState, myReducer)` since `liftReducer` changes the input as well as the output."}}