diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2015, Robin Green
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Robin Green nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/PullRequestFiles.hs b/PullRequestFiles.hs
new file mode 100644
--- /dev/null
+++ b/PullRequestFiles.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TupleSections     #-}
+module PullRequestFiles (filesByPullRequest, prsTouchingFile) where
+
+import           BasicPrelude
+import           Data.Text           (unpack)
+import           Github.PullRequests
+
+fromEither :: String -> Either Error a -> IO a
+fromEither msgPrefix (Left e)  = fail $ msgPrefix ++ ": " ++ unpack (show e)
+fromEither _         (Right a) = return a
+
+filesByPullRequest :: String -> String -> IO [(Int, [File])]
+filesByPullRequest user repo = do
+  pullReqs <- fromEither "pull requests" =<< pullRequestsFor user repo
+  mapM (combine . pullRequestNumber) pullReqs
+  where
+        combine prNum = (prNum, ) <$> (fromEither ("files for " ++ unpack (show prNum)) =<< pullRequestFiles user repo prNum)
+
+prsTouchingFile :: String -> String -> String -> IO [Int]
+prsTouchingFile file user repo = map fst . filter (any ((== file) . fileFilename) . snd) <$> filesByPullRequest user repo
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/github-utils.cabal b/github-utils.cabal
new file mode 100644
--- /dev/null
+++ b/github-utils.cabal
@@ -0,0 +1,28 @@
+-- Initial github-utils.cabal generated by cabal init.  For further 
+-- documentation, see http://haskell.org/cabal/users-guide/
+
+name:                github-utils
+version:             0.1.0
+synopsis:            Useful functions that use the GitHub API
+-- description:         
+homepage:            https://github.com/greenrd/github-utils
+license:             BSD3
+license-file:        LICENSE
+author:              Robin Green
+maintainer:          greenrd@greenrd.org
+-- copyright:           
+category:            Network
+build-type:          Simple
+-- extra-source-files:  
+cabal-version:       >=1.10
+
+library
+  exposed-modules:     PullRequestFiles
+  -- other-modules:       
+  -- other-extensions:    
+  build-depends:       base >=4.7 && <4.8
+                     , basic-prelude >= 0.3 && <0.4
+                     , github >=0.13 && <0.14
+                     , text >= 1.2 && < 1.3
+  -- hs-source-dirs:      
+  default-language:    Haskell2010
