{"action":"created","issue":{"url":"https://api.github.com/repos/snowleopard/shaking-up-ghc/issues/130","labels_url":"https://api.github.com/repos/snowleopard/shaking-up-ghc/issues/130/labels{/name}","comments_url":"https://api.github.com/repos/snowleopard/shaking-up-ghc/issues/130/comments","events_url":"https://api.github.com/repos/snowleopard/shaking-up-ghc/issues/130/events","html_url":"https://github.com/snowleopard/shaking-up-ghc/issues/130","id":125458401,"number":130,"title":"Use the extra library","user":{"login":"ndmitchell","id":1651197,"avatar_url":"https://avatars.githubusercontent.com/u/1651197?v=3","gravatar_id":"","url":"https://api.github.com/users/ndmitchell","html_url":"https://github.com/ndmitchell","followers_url":"https://api.github.com/users/ndmitchell/followers","following_url":"https://api.github.com/users/ndmitchell/following{/other_user}","gists_url":"https://api.github.com/users/ndmitchell/gists{/gist_id}","starred_url":"https://api.github.com/users/ndmitchell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ndmitchell/subscriptions","organizations_url":"https://api.github.com/users/ndmitchell/orgs","repos_url":"https://api.github.com/users/ndmitchell/repos","events_url":"https://api.github.com/users/ndmitchell/events{/privacy}","received_events_url":"https://api.github.com/users/ndmitchell/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/snowleopard/shaking-up-ghc/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":{"login":"ndmitchell","id":1651197,"avatar_url":"https://avatars.githubusercontent.com/u/1651197?v=3","gravatar_id":"","url":"https://api.github.com/users/ndmitchell","html_url":"https://github.com/ndmitchell","followers_url":"https://api.github.com/users/ndmitchell/followers","following_url":"https://api.github.com/users/ndmitchell/following{/other_user}","gists_url":"https://api.github.com/users/ndmitchell/gists{/gist_id}","starred_url":"https://api.github.com/users/ndmitchell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ndmitchell/subscriptions","organizations_url":"https://api.github.com/users/ndmitchell/orgs","repos_url":"https://api.github.com/users/ndmitchell/repos","events_url":"https://api.github.com/users/ndmitchell/events{/privacy}","received_events_url":"https://api.github.com/users/ndmitchell/received_events","type":"User","site_admin":false},"milestone":null,"comments":2,"created_at":"2016-01-07T18:36:30Z","updated_at":"2016-01-08T01:31:09Z","closed_at":null,"body":"A number of functions in Base.hs are very similar to ones in the extra library, for example chunksOfSize is [chunksOf](https://hackage.haskell.org/package/extra-1.4.3/docs/Data-List-Extra.html#v:chunksOf), replace is there as [replace](https://hackage.haskell.org/package/extra-1.4.3/docs/Data-List-Extra.html#v:replace), wordsWhen is [wordsBy](https://hackage.haskell.org/package/extra-1.4.3/docs/Data-List-Extra.html#v:wordsBy). I suggest you use the extra library because:\r\n\r\n* It's a dependency of Shake, so you don't increase the transitive set of things that the build system depends on.\r\n* It has barely any dependencies itself, so doesn't cause issues, e.g. with old-time or similar.\r\n* It has lots of useful methods you might not have thought of abstracting, or which might not be useful for just this one project.\r\n* Everything is tested and (to some extent) optimised.\r\n\r\nIf you decide to use it, I'll send a few pull requests switching things over. If you decide against it then that's fine too - keeping dependencies down is a good plan."},"comment":{"url":"https://api.github.com/repos/snowleopard/shaking-up-ghc/issues/comments/169861295","html_url":"https://github.com/snowleopard/shaking-up-ghc/issues/130#issuecomment-169861295","issue_url":"https://api.github.com/repos/snowleopard/shaking-up-ghc/issues/130","id":169861295,"user":{"login":"angerman","id":40449,"avatar_url":"https://avatars.githubusercontent.com/u/40449?v=3","gravatar_id":"","url":"https://api.github.com/users/angerman","html_url":"https://github.com/angerman","followers_url":"https://api.github.com/users/angerman/followers","following_url":"https://api.github.com/users/angerman/following{/other_user}","gists_url":"https://api.github.com/users/angerman/gists{/gist_id}","starred_url":"https://api.github.com/users/angerman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/angerman/subscriptions","organizations_url":"https://api.github.com/users/angerman/orgs","repos_url":"https://api.github.com/users/angerman/repos","events_url":"https://api.github.com/users/angerman/events{/privacy}","received_events_url":"https://api.github.com/users/angerman/received_events","type":"User","site_admin":false},"created_at":"2016-01-08T01:31:09Z","updated_at":"2016-01-08T01:31:09Z","body":"Ohh wow. Now I feel rather stupid for not finding `wordsBy`. :+1: "}}