packages feed

github-webhooks (empty) → 0.9.0

raw patch · 11 files changed

+7060/−0 lines, 11 filesdep +aesondep +basedep +base16-bytestringsetup-changed

Dependencies added: aeson, base, base16-bytestring, bytestring, cryptonite, deepseq, deepseq-generics, github-webhooks, hspec, memory, text, time, vector

Files

+ CHANGELOG.md view
@@ -0,0 +1,4 @@+# 0.9.0++* This is an alpha testing release with an incomplete feature set to recieve feedback on the API.+* The API may change in the recent future. When alpha testing has commenced, the version will start at `1.0.0`.
+ LICENSE view
@@ -0,0 +1,21 @@+MIT License++Copyright (c) 2017 OnRock Engineering (https://onrock.engineering)++Permission is hereby granted, free of charge, to any person obtaining a copy+of this software and associated documentation files (the "Software"), to deal+in the Software without restriction, including without limitation the rights+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the Software is+furnished to do so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in all+copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+SOFTWARE.
+ Setup.lhs view
@@ -0,0 +1,3 @@+#!/usr/bin/env runhaskell+> import Distribution.Simple+> main = defaultMain
+ github-webhooks.cabal view
@@ -0,0 +1,74 @@+-- This file has been generated from package.yaml by hpack version 0.21.2.+--+-- see: https://github.com/sol/hpack+--+-- hash: f7a90de8da51ba7bfe8b932cd2e197309c530257d3ed031c1d776ccb5cd7f39e++name:           github-webhooks+version:        0.9.0+synopsis:       Aeson instances for GitHub Webhook payloads.+description:    Complete instances for decoding GitHub Webhook payloads (using @aeson@). See the README at <https://github.com/onrock-eng/github-webhooks#readme> for examples.+category:       GitHub+homepage:       https://github.com/onrock-eng/github-webhooks#readme+bug-reports:    https://github.com/onrock-eng/github-webhooks/issues+author:         Kyle Van Berendonck <kyle.vanberendonck@onrock.engineering>+maintainer:     Kyle Van Berendonck <foss@onrock.engineering>+copyright:      (c) 2017-2018 OnRock Engineering+license:        MIT+license-file:   LICENSE+build-type:     Simple+cabal-version:  >= 1.10++extra-source-files:+    CHANGELOG.md+    package.yaml+    stack.yaml++source-repository head+  type: git+  location: https://github.com/onrock-eng/github-webhooks++library+  hs-source-dirs:+      src+  default-extensions: DeriveDataTypeable DeriveGeneric OverloadedStrings+  ghc-options: -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates+  build-depends:+      aeson+    , base ==4.*+    , base16-bytestring+    , bytestring+    , cryptonite+    , deepseq+    , deepseq-generics+    , memory+    , text+    , time+    , vector+  exposed-modules:+      GitHub.Data.Webhooks.Events+      GitHub.Data.Webhooks.Payload+      GitHub.Data.Webhooks.Secure+  other-modules:+      Paths_github_webhooks+  default-language: Haskell2010++test-suite spec+  type: exitcode-stdio-1.0+  main-is: Spec.hs+  hs-source-dirs:+      spec+  default-extensions: DeriveDataTypeable DeriveGeneric OverloadedStrings ScopedTypeVariables+  ghc-options: -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates+  build-depends:+      aeson+    , base ==4.*+    , bytestring+    , github-webhooks+    , hspec ==2.*+    , text+    , vector+  other-modules:+      DecodeEventsSpec+      Paths_github_webhooks+  default-language: Haskell2010
+ package.yaml view
@@ -0,0 +1,54 @@+name: github-webhooks+version: 0.9.0++category: GitHub+license: MIT+extra-source-files:+  - package.yaml+  - stack.yaml+  - CHANGELOG.md+synopsis: Aeson instances for GitHub Webhook payloads.+copyright: (c) 2017-2018 OnRock Engineering+author: Kyle Van Berendonck <kyle.vanberendonck@onrock.engineering>+maintainer: Kyle Van Berendonck <foss@onrock.engineering>+github: onrock-eng/github-webhooks+description:+    Complete instances for decoding GitHub Webhook payloads (using @aeson@).+    See the README at <https://github.com/onrock-eng/github-webhooks#readme> for examples.++ghc-options:+  - -Wall+  - -Wincomplete-uni-patterns+  - -Wincomplete-record-updates++default-extensions:+  - DeriveDataTypeable+  - DeriveGeneric+  - OverloadedStrings++dependencies:+ - base == 4.*+ - aeson+ - bytestring+ - text+ - vector++library:+  source-dirs: src+  dependencies:+    - base16-bytestring+    - cryptonite+    - deepseq+    - deepseq-generics+    - memory+    - time++tests:+  spec:+    source-dirs: spec+    main: Spec.hs+    dependencies:+      - github-webhooks+      - hspec == 2.*+    default-extensions:+      - ScopedTypeVariables
+ spec/DecodeEventsSpec.hs view
@@ -0,0 +1,4316 @@+-- | Smoke tests to make sure that the Aeson FromJSON instances work as expected.+module DecodeEventsSpec+    ( spec+    ) where++import           Test.Hspec+import           Control.Monad               ( void )+import           Data.Aeson                  ( FromJSON, eitherDecode' )+import qualified Data.Text                   as T+import qualified Data.ByteString.Lazy        as BSL+import qualified Data.Vector                 as V++import           GitHub.Data.Webhooks.Events+import           GitHub.Data.Webhooks.Payload+++-- Run GHCi:+-- $ stack install pretty-show+-- $ stack ghci --test pretty-show++-- Paste:+{-+import Data.Aeson+import qualified Data.ByteString.Lazy as BSL+import GitHub.Data.Webhooks.Events+import Text.Show.Pretty+import Text.PrettyPrint.HughesPJ+-}++-- Use:+-- do { x <- BSL.readFile "fixtures/watch-event.json";+--      putStrLn $ renderStyle (style {lineLength=200}) . ppDoc $ either error id (eitherDecode' x :: Either String WatchEvent) }++fixtureShouldMatch :: (FromJSON a, Show a, Eq a) => String -> a -> IO ()+fixtureShouldMatch path expected = do+  str <- BSL.readFile path+  let output = eitherDecode' str+  void $ output `shouldBe` Right expected++spec :: Spec+spec = do+  it "can decode CommitCommentEvent"      $ fixtureShouldMatch "fixtures/commit-comment-event.json" commitCommentEventFixture+  it "can decode CreateEvent"             $ fixtureShouldMatch "fixtures/create-event.json" createEventFixture+  it "can decode DeleteEvent"             $ fixtureShouldMatch "fixtures/delete-event.json" deleteEventFixture+  it "can decode DeploymentEvent"         $ fixtureShouldMatch "fixtures/deployment-event.json" deploymentEventFixture+  it "can decode DeploymentStatusEvent"   $ fixtureShouldMatch "fixtures/deployment-status-event.json" deploymentStatusEventFixture+  it "can decode ForkEvent"               $ fixtureShouldMatch "fixtures/fork-event.json" forkEventFixture+  it "can decode GollumEvent"             $ fixtureShouldMatch "fixtures/gollum-event.json" gollumEventFixture+  it "can decode InstallationEvent"       $ fixtureShouldMatch "fixtures/installation-event.json" installationEventFixture+  it "can decode InstallationRepositoriesEvent" $ fixtureShouldMatch "fixtures/installation-repo-event.json" installationRepoEventFixture+  it "can decode IssueCommentEvent"       $ fixtureShouldMatch "fixtures/issue-comment-event.json" issueCommentEventFixture+  it "can decode IssuesEvent"             $ fixtureShouldMatch "fixtures/issues-event.json" issuesEventFixture+  it "can decode LabelEvent"              $ fixtureShouldMatch "fixtures/label-event.json" labelEventFixture+  it "can decode MemberEvent"             $ fixtureShouldMatch "fixtures/member-event.json" memberEventFixture+  it "can decode MembershipEvent"         $ fixtureShouldMatch "fixtures/membership-event.json" membershipEventFixture+  it "can decode MilestoneEvent"          $ fixtureShouldMatch "fixtures/milestone-event.json" milestoneEventFixture+  it "can decode OrgBlockEvent"           $ fixtureShouldMatch "fixtures/org-block-event.json" orgBlockEventFixture+  it "can decode OrganizationEvent"       $ fixtureShouldMatch "fixtures/organization-event.json" organizationEventFixture+  it "can decode PageBuildEvent"          $ fixtureShouldMatch "fixtures/page-build-event.json" pageBuildEventFixture+  it "can decode ProjectCardEvent"        $ fixtureShouldMatch "fixtures/project-card-event.json" projectCardEventFixture+  it "can decode ProjectColumnEvent"      $ fixtureShouldMatch "fixtures/project-column-event.json" projectColumnEventFixture+  it "can decode ProjectEvent"            $ fixtureShouldMatch "fixtures/project-event.json" projectEventFixture+  it "can decode PublicEvent"             $ fixtureShouldMatch "fixtures/public-event.json" publicEventFixture+  it "can decode PullRequestEvent"        $ fixtureShouldMatch "fixtures/pull-request-event.json" pullRequestEventFixture+  it "can decode PullRequestReviewCommentEvent" $ fixtureShouldMatch  "fixtures/pull-request-review-comment-event.json" pullRequestReviewCommentEventFixture+  it "can decode PullRequestReviewEvent"  $ fixtureShouldMatch "fixtures/pull-request-review-event.json" pullRequestReviewEventFixture+  it "can decode PushEvent"               $ fixtureShouldMatch "fixtures/push-event.json" pushEventFixture+  it "can decode ReleaseEvent"            $ fixtureShouldMatch "fixtures/release-event.json" releaseEventFixture+  it "can decode RepositoryEvent"         $ fixtureShouldMatch "fixtures/repository-event.json" repositoryEventFixture+  it "can decode StatusEvent"             $ fixtureShouldMatch "fixtures/status-event.json" statusEventFixture+  it "can decode TeamAddEvent"            $ fixtureShouldMatch "fixtures/team-add-event.json" teamAddEventFixture+  it "can decode TeamEvent"               $ fixtureShouldMatch "fixtures/team-event.json" teamEventFixture+  it "can decode WatchEvent"              $ fixtureShouldMatch "fixtures/watch-event.json" watchEventFixture+++-- Fixtures+-- These correspond to the expected decoded output of the above JSON files.++commitCommentEventFixture :: CommitCommentEvent+commitCommentEventFixture = CommitCommentEvent+    { evCommitCommentAction = CommitCommentActionCreated+    , evCommitCommentPayload =+        HookCommitComment+          { whCommitCommentUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments/11056394"+          , whCommitCommentHtmlUrl =+              URL "https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b#commitcomment-11056394"+          , whCommitCommentId = 11056394+          , whCommitCommentUser =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whCommitCommentPos = Nothing+          , whCommitCommentLine = Nothing+          , whCommitCommentPath = Nothing+          , whCommitCommentCommitSha = "9049f1265b7d61be4a8904a9a27120d2064dab3b"+          , whCommitCommentCreatedAt = read "2015-05-05 23:40:29"+          , whCommitCommentUpdatedAt = read "2015-05-05 23:40:29"+          , whCommitCommentBody = "This is a really good change! :+1:"+          }+    , evCommitCommentRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evCommitCommentSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++createEventFixture :: CreateEvent+createEventFixture = CreateEvent+    { evCreateRef = "0.0.1"+    , evCreateRefType = "tag"+    , evCreateMasterBranch = "master"+    , evCreateDescription = ""+    , evCreatePusherType = OwnerUser+    , evCreateRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:38"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evCreateSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++deleteEventFixture :: DeleteEvent+deleteEventFixture = DeleteEvent+    { evDeleteRef = "simple-tag"+    , evDeleteRefType = "tag"+    , evDeletePusherType = OwnerUser+    , evDeleteRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:40"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evDeleteSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++deploymentEventFixture :: DeploymentEvent+deploymentEventFixture = DeploymentEvent+    { evDeploymentInfo =+        HookDeployment+          { whDeploymentUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692"+          , whDeploymentId = 710692+          , whDeploymentSha = "9049f1265b7d61be4a8904a9a27120d2064dab3b"+          , whDeploymentRef = "master"+          , whDeploymentTask = "deploy"+          , whDeploymentEnv = "production"+          , whDeploymentDescription = Nothing+          , whDeploymentCreator =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whDeploymentCreatedAt = read "2015-05-05 23:40:38"+          , whDeploymentUpdatedAt = read "2015-05-05 23:40:38"+          , whDeploymentStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692/statuses"+          , whDeploymentRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          }+    , evDeploymentRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:38"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evDeploymentSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++deploymentStatusEventFixture :: DeploymentStatusEvent+deploymentStatusEventFixture = DeploymentStatusEvent+    { evDeplStatusInfo =+        HookDeploymentStatus+          { whDeploymentStatusUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692/statuses/1115122"+          , whDeploymentStatusId = 1115122+          , whDeploymentStatusState = "success"+          , whDeploymentStatusCreator =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whDeploymentStatusDesc = Nothing+          , whDeploymentStatusTargetUrl = Nothing+          , whDeploymentStatusCreatedAt = read "2015-05-05 23:40:39"+          , whDeploymentStatusUpdatedAt = read "2015-05-05 23:40:39"+          , whDeploymentStatusDeplUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692"+          , whDeploymentStatusRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          }+    , evDeplStatusDeployment =+        HookDeployment+          { whDeploymentUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692"+          , whDeploymentId = 710692+          , whDeploymentSha = "9049f1265b7d61be4a8904a9a27120d2064dab3b"+          , whDeploymentRef = "master"+          , whDeploymentTask = "deploy"+          , whDeploymentEnv = "production"+          , whDeploymentDescription = Nothing+          , whDeploymentCreator =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whDeploymentCreatedAt = read "2015-05-05 23:40:38"+          , whDeploymentUpdatedAt = read "2015-05-05 23:40:38"+          , whDeploymentStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692/statuses"+          , whDeploymentRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          }+    , evDeplStatusRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:38"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evDeplStatusSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++forkEventFixture :: ForkEvent+forkEventFixture = ForkEvent+    { evForkDestination =+        HookRepository+          { whRepoId = 35129393+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterandthehackers/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterandthehackers"+                , whUserId = 7649605+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterandthehackers"+                , whUserHtmlUrl = URL "https://github.com/baxterandthehackers"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterandthehackers/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterandthehackers/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterandthehackers/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterandthehackers/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterandthehackers/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterandthehackers/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterandthehackers/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterandthehackers/received_events"+                , whUserType = OwnerOrganization+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterandthehackers/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = True+          , whRepoUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:30"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterandthehackers/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterandthehackers/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterandthehackers/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterandthehackers/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = False+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 0+          , whRepoDefaultBranchName = "master"+          }+    , evForkSource =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 1+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evForkSender =+        HookUser+          { whUserLogin = "baxterandthehackers"+          , whUserId = 7649605+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterandthehackers"+          , whUserHtmlUrl = URL "https://github.com/baxterandthehackers"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterandthehackers/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterandthehackers/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterandthehackers/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterandthehackers/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterandthehackers/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterandthehackers/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterandthehackers/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterandthehackers/received_events"+          , whUserType = OwnerOrganization+          , whUserIsAdminOfSite = False+          }+    }++gollumEventFixture :: GollumEvent+gollumEventFixture = GollumEvent+    { evGollumPages = V.fromList+        [ HookWikiPage+            { whWikiPageName = "Home"+            , whWikiPageTitle = "Home"+            , whWikiPageSummary = Nothing+            , wkWikiPageAction = "created"+            , whWikiPageSha = "91ea1bd42aa2ba166b86e8aefe049e9837214e67"+            , whWikiPageHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/wiki/Home"+            }+        ]+    , evGollumRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:17"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 0+          , whRepoDefaultBranchName = "master"+          }+    , evGollumSender =+        HookUser+          { whUserLogin = "jasonrudolph"+          , whUserId = 2988+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/2988?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/jasonrudolph"+          , whUserHtmlUrl = URL "https://github.com/jasonrudolph"+          , whUserFollowersUrl = URL "https://api.github.com/users/jasonrudolph/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/jasonrudolph/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/jasonrudolph/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/jasonrudolph/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/jasonrudolph/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/jasonrudolph/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/jasonrudolph/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/jasonrudolph/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/jasonrudolph/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = True+          }+    }++installationEventFixture :: InstallationEvent+installationEventFixture = InstallationEvent+    { evInstallationAction = InstallationDeletedAction+    , evInstallationInfo =+        HookInstallation+          { whInstallationId = 2+          , whInstallationAccount =+              HookUser+                { whUserLogin = "octocat"+                , whUserId = 1+                , whUserAvatarUrl = URL "https://github.com/images/error/octocat_happy.gif"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/octocat"+                , whUserHtmlUrl = URL "https://github.com/octocat"+                , whUserFollowersUrl = URL "https://api.github.com/users/octocat/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/octocat/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/octocat/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/octocat/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/octocat/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/octocat/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/octocat/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/octocat/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/octocat/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whInstallationRepoSel = "selected"+          , whInstallationTokenUrl = URL "https://api.github.com/installations/2/access_tokens"+          , whInstallationRepoUrl = URL "https://api.github.com/installation/repositories"+          }+    , evInstallationSender =+        HookUser+          { whUserLogin = "octocat"+          , whUserId = 1+          , whUserAvatarUrl = URL "https://github.com/images/error/octocat_happy.gif"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/octocat"+          , whUserHtmlUrl = URL "https://github.com/octocat"+          , whUserFollowersUrl = URL "https://api.github.com/users/octocat/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/octocat/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/octocat/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/octocat/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/octocat/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/octocat/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/octocat/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/octocat/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/octocat/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++installationRepoEventFixture :: InstallationRepositoriesEvent+installationRepoEventFixture = InstallationRepositoriesEvent+    { evInstallationRepoAction = InstallationRepoRemovedAction+    , evInstallationRepoInfo =+        HookInstallation+          { whInstallationId = 2+          , whInstallationAccount =+              HookUser+                { whUserLogin = "octocat"+                , whUserId = 1+                , whUserAvatarUrl = URL "https://github.com/images/error/octocat_happy.gif"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/octocat"+                , whUserHtmlUrl = URL "https://github.com/octocat"+                , whUserFollowersUrl = URL "https://api.github.com/users/octocat/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/octocat/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/octocat/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/octocat/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/octocat/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/octocat/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/octocat/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/octocat/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/octocat/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whInstallationRepoSel = "selected"+          , whInstallationTokenUrl = URL "https://api.github.com/installations/2/access_tokens"+          , whInstallationRepoUrl = URL "https://api.github.com/installation/repositories"+          }+    , evInstallationRepoSel = "selected"+    , evInstallationReposAdd = V.empty+    , evInstallationReposRemove = V.fromList+        [ HookRepositorySimple { whSimplRepoId = 1296269 , whSimplRepoName = "Hello-World" , whSimplRepoFullName = "octocat/Hello-World" } ]+    , evInstallationReposSender =+        HookUser+          { whUserLogin = "octocat"+          , whUserId = 1+          , whUserAvatarUrl = URL "https://github.com/images/error/octocat_happy.gif"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/octocat"+          , whUserHtmlUrl = URL "https://github.com/octocat"+          , whUserFollowersUrl = URL "https://api.github.com/users/octocat/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/octocat/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/octocat/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/octocat/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/octocat/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/octocat/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/octocat/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/octocat/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/octocat/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++issueCommentEventFixture :: IssueCommentEvent+issueCommentEventFixture = IssueCommentEvent+    { evIssueCommentAction = IssueCommentCreatedAction+    , evIssueCommentIssue =+        HookIssue+          { whIssueUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2"+          , whIssueLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/labels{/name}"+          , whIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/comments"+          , whIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/events"+          , whIssueHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/issues/2"+          , whIssueId = 73464126+          , whIssueNumber = 2+          , whIssueTitle = "Spelling error in the README file"+          , whIssueUser =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whIssueLabels = V.fromList+              [ HookIssueLabels+                  { whIssueLabelId = Nothing+                  , whIssueLabelUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels/bug"+                  , whIssueLabelName = "bug"+                  , whIssueLabelColor = "fc2929"+                  , whIssueLabelIsDefault = False+                  }+              ]+          , whIssueState = "open"+          , whIssueIsLocked = False+          , whIssueAssignee = Nothing+          , whIssueMilestone = Nothing+          , whIssueCommentCount = 1+          , whIssueCreatedAt = read "2015-05-05 23:40:28"+          , whIssueUpdatedAt = read "2015-05-05 23:40:28"+          , whIssueClosedAt = Nothing+          , whIssueBody = "It looks like you accidently spelled 'commit' with two 't's."+          }+    , evIssueCommentPayload =+        HookIssueComment+          { whIssueCommentUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments/99262140"+          , whIssueCommentHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/issues/2#issuecomment-99262140"+          , whIssueCommentIssueUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2"+          , whIssueCommentId = 99262140+          , whIssueCommentUser =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whIssueCommentCreatedAt = read "2015-05-05 23:40:28"+          , whIssueCommentUpdatedAt = read "2015-05-05 23:40:28"+          , whIssueCommentBody = "You are totally right! I'll get this fixed right away."+          }+    , evIssueCommentRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evIssueCommentSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++issuesEventFixture :: IssuesEvent+issuesEventFixture = IssuesEvent+    { evIssuesEventAction = IssuesOpenedAction+    , evIssuesEventIssue =+        HookIssue+          { whIssueUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2"+          , whIssueLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/labels{/name}"+          , whIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/comments"+          , whIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/events"+          , whIssueHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/issues/2"+          , whIssueId = 73464126+          , whIssueNumber = 2+          , whIssueTitle = "Spelling error in the README file"+          , whIssueUser =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whIssueLabels = V.fromList+              [ HookIssueLabels+                  { whIssueLabelId = Just 208045946+                  , whIssueLabelUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels/bug"+                  , whIssueLabelName = "bug"+                  , whIssueLabelColor = "fc2929"+                  , whIssueLabelIsDefault = True+                  }+              ]+          , whIssueState = "open"+          , whIssueIsLocked = False+          , whIssueAssignee = Nothing+          , whIssueMilestone = Nothing+          , whIssueCommentCount = 0+          , whIssueCreatedAt = read "2015-05-05 23:40:28"+          , whIssueUpdatedAt = read "2015-05-05 23:40:28"+          , whIssueClosedAt = Nothing+          , whIssueBody = "It looks like you accidently spelled 'commit' with two 't's."+          }+    , evIssuesEventRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evIssuesEventSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++labelEventFixture :: LabelEvent+labelEventFixture = LabelEvent+    { evLabelEventAction = LabelCreatedAction+    , evLabelEventPayload =+        HookRepositoryLabel+          { whRepoLabelUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/labels/blocked"+          , whRepoLabelName = "blocked"+          , whRepoLabelColor = "ff0000"+          }+    , evLabelEventRepo =+        HookRepository+          { whRepoId = 67075329+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterandthehackers/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterandthehackers"+                , whUserId = 4312013+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/4312013?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterandthehackers"+                , whUserHtmlUrl = URL "https://github.com/baxterandthehackers"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterandthehackers/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterandthehackers/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterandthehackers/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterandthehackers/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterandthehackers/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterandthehackers/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterandthehackers/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterandthehackers/received_events"+                , whUserType = OwnerOrganization+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = True+          , whRepoHtmlUrl = URL "https://github.com/baxterandthehackers/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2016-08-31 21:38:51"+          , whRepoUpdatedAt = read "2016-08-31 21:38:51"+          , whRepoPushedAt = read "2016-08-31 21:38:51"+          , whRepoGitUrl = URL "git://github.com/baxterandthehackers/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterandthehackers/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterandthehackers/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterandthehackers/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = False+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evLabelEventOrganization =+        Just+          HookOrganization+            { whOrgLogin = "baxterandthehackers"+            , whOrgId = 4312013+            , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+            , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+            , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+            , whOrgHooksUrl = Just (URL "https://api.github.com/orgs/baxterandthehackers/hooks")+            , whOrgIssuesUrl = Just (URL "https://api.github.com/orgs/baxterandthehackers/issues")+            , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+            , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+            , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/4312013?v=3"+            , whOrgDescription = T.empty+            }+    , evLabelEventSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 7649605+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = True+          }+    }++memberEventFixture :: MemberEvent+memberEventFixture = MemberEvent+    { evMemberAction = MemberAddedAction+    , evMemberUser =+        HookUser+          { whUserLogin = "octocat"+          , whUserId = 583231+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/583231?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/octocat"+          , whUserHtmlUrl = URL "https://github.com/octocat"+          , whUserFollowersUrl = URL "https://api.github.com/users/octocat/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/octocat/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/octocat/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/octocat/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/octocat/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/octocat/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/octocat/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/octocat/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/octocat/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    , evMemberRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:40"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evMemberSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++membershipEventFixture :: MembershipEvent+membershipEventFixture = MembershipEvent+    { evMembershipAction = MembershipAddedAction+    , evMembershipScope = "team"+    , evMembershipUser =+        HookUser+          { whUserLogin = "kdaigle"+          , whUserId = 2501+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/2501?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/kdaigle"+          , whUserHtmlUrl = URL "https://github.com/kdaigle"+          , whUserFollowersUrl = URL "https://api.github.com/users/kdaigle/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/kdaigle/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/kdaigle/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/kdaigle/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/kdaigle/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/kdaigle/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/kdaigle/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/kdaigle/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/kdaigle/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = True+          }+    , evMembershipTeam =+        HookTeam+          { whTeamName = "Contractors"+          , whTeamId = 123456+          , whTeamSlug = "contractors"+          , whTeamPermission = "admin"+          , whTeamUrl = URL "https://api.github.com/teams/123456"+          , whTeamMembersUrl = URL "https://api.github.com/teams/123456/members{/member}"+          , whTeamRepositoriesUrl = URL "https://api.github.com/teams/123456/repos"+          }+    , evMembershipOrg =+        HookOrganization+          { whOrgLogin = "baxterandthehackers"+          , whOrgId = 7649605+          , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+          , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+          , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+          , whOrgHooksUrl = Nothing+          , whOrgIssuesUrl = Nothing+          , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+          , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+          , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=2"+          , whOrgDescription = T.empty+          }+    , evMembershipSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=2"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++milestoneEventFixture :: MilestoneEvent+milestoneEventFixture = MilestoneEvent+    { evMilestoneAction = MilestoneCreatedAction+    , evMilestoenPayload =+        HookMilestone+          { whMilestoneUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/milestones/3"+          , whMilestoneHtmlUrl =+              URL "https://github.com/baxterandthehackers/public-repo/milestones/Test%20milestone%20creation%20webhook%20from%20command%20line2"+          , whMilestoneLabelsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/milestones/3/labels"+          , whMilestoneId = 2055681+          , whMilestoneNumber = 3+          , whMilestoneTitle = "I am a milestone"+          , whMilestoneDescription = Nothing+          , whMilestoneCreator =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 7649605+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = True+                }+          , whMilestoneOpenIssues = 0+          , whMilestoneClosedIssues = 0+          , whMilestoneState = "open"+          , whMilestoneCreatedAt = read "2016-10-07 19:26:08"+          , whMilestoneUpdatedAt = read "2016-10-07 19:26:08"+          , whMilestoneDueOn = Nothing+          , whMilestoneClosedAt = Nothing+          }+    , evMilestoneRepo =+        HookRepository+          { whRepoId = 70275481+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterandthehackers/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterandthehackers"+                , whUserId = 4312013+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/4312013?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterandthehackers"+                , whUserHtmlUrl = URL "https://github.com/baxterandthehackers"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterandthehackers/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterandthehackers/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterandthehackers/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterandthehackers/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterandthehackers/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterandthehackers/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterandthehackers/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterandthehackers/received_events"+                , whUserType = OwnerOrganization+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = True+          , whRepoHtmlUrl = URL "https://github.com/baxterandthehackers/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2016-10-07 19:10:12"+          , whRepoUpdatedAt = read "2016-10-07 19:10:12"+          , whRepoPushedAt = read "2016-10-07 19:10:13"+          , whRepoGitUrl = URL "git://github.com/baxterandthehackers/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterandthehackers/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterandthehackers/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterandthehackers/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = False+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 0+          , whRepoDefaultBranchName = "master"+          }+    , evMilestoneOrg =+        HookOrganization+          { whOrgLogin = "baxterandthehackers"+          , whOrgId = 4312013+          , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+          , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+          , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+          , whOrgHooksUrl = Just (URL "https://api.github.com/orgs/baxterandthehackers/hooks")+          , whOrgIssuesUrl = Just (URL "https://api.github.com/orgs/baxterandthehackers/issues")+          , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+          , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+          , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/4312013?v=3"+          , whOrgDescription = T.empty+          }+    , evMilestoneSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 7649605+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = True+          }+    }++orgBlockEventFixture :: OrgBlockEvent+orgBlockEventFixture = OrgBlockEvent+    { evOrgBlockAction = OrgBlockBlockedAction+    , evOrgBlockUser =+        HookUser+          { whUserLogin = "octocat"+          , whUserId = 583231+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/583231?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/octocat"+          , whUserHtmlUrl = URL "https://github.com/octocat"+          , whUserFollowersUrl = URL "https://api.github.com/users/octocat/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/octocat/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/octocat/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/octocat/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/octocat/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/octocat/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/octocat/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/octocat/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/octocat/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    , evOrgBlockOrg =+        HookOrganization+          { whOrgLogin = "github"+          , whOrgId = 4366038+          , whOrgUrl = URL "https://api.github.com/orgs/github"+          , whOrgReposUrl = URL "https://api.github.com/orgs/github/repos"+          , whOrgEventsUrl = URL "https://api.github.com/orgs/github/events"+          , whOrgHooksUrl = Just $ URL "https://api.github.com/orgs/github/hooks"+          , whOrgIssuesUrl = Just $ URL "https://api.github.com/orgs/github/issues"+          , whOrgMembersUrl = URL "https://api.github.com/orgs/github/members{/member}"+          , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/github/public_members{/member}"+          , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/4366038?v=3"+          , whOrgDescription = T.empty+          }+    , evOrgBlockSender =+        HookUser+          { whUserLogin = "octodocs"+          , whUserId = 25781999+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/25781999?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/octodocs"+          , whUserHtmlUrl = URL "https://github.com/octodocs"+          , whUserFollowersUrl = URL "https://api.github.com/users/octodocs/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/octodocs/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/octodocs/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/octodocs/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/octodocs/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/octodocs/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/octodocs/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/octodocs/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/octodocs/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++organizationEventFixture :: OrganizationEvent+organizationEventFixture = OrganizationEvent+    { evOrganizationAction = OrgMemberInvitedAction+    , evOrganizationInvitation =+        HookOrganizationInvitation+          { whOrgInvitationId = 3294302+          , whOrgInvitationLogin = "baxterthehacker"+          , whOrgInvitationEmail = Nothing+          , whOrgInvitationRole = "direct_member"+          }+    , evOrganizationMembership =+        HookOrganizationMembership+          { whOrgMembershipUrl = URL "https://api.github.com/orgs/baxterandthehackers/memberships/baxterthehacker"+          , whOrgMembershipState = "active"+          , whOrgMembershipRole = "member"+          , whOrgMembershipOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+          , whOrgMembershipUser =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 7649605+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/17085448?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          }+    , evOrganizationOrg =+        HookOrganization+          { whOrgLogin = "baxterandthehackers"+          , whOrgId = 4312013+          , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+          , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+          , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+          , whOrgHooksUrl = Just $ URL "https://api.github.com/orgs/baxterandthehackers/hooks"+          , whOrgIssuesUrl = Just $ URL "https://api.github.com/orgs/baxterandthehackers/issues"+          , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+          , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+          , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/4312013?v=3"+          , whOrgDescription = T.empty+          }+    , evOrganizationSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 7649605+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = True+          }+    }++pageBuildEventFixture :: PageBuildEvent+pageBuildEventFixture = PageBuildEvent+    { evPageBuildId = 15995382+    , evPageBuildResult =+        HookPageBuildResult+          { whPageBuildUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pages/builds/15995382"+          , whPageBuildStatus = "built"+          , whPageBuildError = Nothing+          , whPageBuildPusher =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whPageBuildCommitSha = "053b99542c83021d6b202d1a1f5ecd5ef7084e55"+          , whPageBuildDuration = 3790+          , whPageBuildCreatedAt = read "2015-05-05 23:40:13"+          , whPageBuildUpdatedAt = read "2015-05-05 23:40:17"+          }+    , evPageBuildRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:17"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 0+          , whRepoDefaultBranchName = "master"+          }+    , evPageBuildSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++projectCardEventFixture :: ProjectCardEvent+projectCardEventFixture = ProjectCardEvent+    { evProjectCardAction = ProjectCardCreatedAction+    , evProjectCardPayload =+        HookProjectCard+          { whProjectCardUrl = URL "https://api.github.com/projects/columns/cards/1266091"+          , whProjectCardColumnUrl = URL "https://api.github.com/projects/columns/515520"+          , whProjectCardColumnId = 515520+          , whProjectCardId = 1266091+          , whProjectCardNote = Nothing+          , whProjectCardCreator =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=2"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whProjectCardCreatedAt = read "2017-09-27 23:37:43"+          , whProjectCardUpdatedAt = read "2017-09-27 23:39:09"+          , whProjectCardContentUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/2"+          }+    , evProjectCardRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evProjectCardOrg =+        HookOrganization+          { whOrgLogin = "baxterandthehackers"+          , whOrgId = 7649605+          , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+          , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+          , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+          , whOrgHooksUrl = Nothing+          , whOrgIssuesUrl = Nothing+          , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+          , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+          , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=2"+          , whOrgDescription = T.empty+          }+    , evProjectCardSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=2"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++projectColumnEventFixture :: ProjectColumnEvent+projectColumnEventFixture = ProjectColumnEvent+    { evProjectColumnAction = ProjectColumnCreatedAction+    , evProjectColumnPayload =+        HookProjectColumn+          { whProjectColumnUrl = URL "https://api.github.com/projects/columns/515520"+          , whProjectColumnProjUrl = URL "https://api.github.com/projects/288065"+          , whProjectColumnCardsUrl = URL "https://api.github.com/projects/columns/515520/cards"+          , whProjectColumnId = 515520+          , whProjectColumnName = "High Priority"+          , whProjectColumnCreatedAt = read "2017-09-27 23:37:43"+          , whProjectColumnUpdatedAt = read "2017-09-27 23:39:09"+          }+    , evProjectColumnRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evProjectColumnOrg =+        HookOrganization+          { whOrgLogin = "baxterandthehackers"+          , whOrgId = 7649605+          , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+          , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+          , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+          , whOrgHooksUrl = Nothing+          , whOrgIssuesUrl = Nothing+          , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+          , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+          , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=2"+          , whOrgDescription = T.empty+          }+    , evProjectColumnSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=2"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++projectEventFixture :: ProjectEvent+projectEventFixture = ProjectEvent+    { evProjectEventAction = ProjectCreatedAction+    , evProjectPayload =+        HookProject+          { whProjectOwnerUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whProjectUrl = URL "https://api.github.com/projects/288065"+          , whProjectColumnsUrl = URL "https://api.github.com/projects/288065/columns"+          , whProjectId = 288065+          , whProjectName = "2017"+          , whProjectBody = "Roadmap for work to be done in 2017"+          , whProjectNumber = 10+          , whProjectState = "open"+          , whProjectCreator =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=2"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whProjectCreatedAt = read "2017-09-27 23:37:43"+          , whProjectUpdatedAt = read "2017-09-27 23:39:09"+          }+    , evProjectRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evProjectOrganization =+        HookOrganization+          { whOrgLogin = "baxterandthehackers"+          , whOrgId = 7649605+          , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+          , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+          , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+          , whOrgHooksUrl = Nothing+          , whOrgIssuesUrl = Nothing+          , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+          , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+          , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=2"+          , whOrgDescription = T.empty+          }+    , evProjectSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=2"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++publicEventFixture :: PublicEvent+publicEventFixture = PublicEvent+    { evPublicEventRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:41"+          , whRepoPushedAt = read "2015-05-05 23:40:40"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evPublicEventSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++pullRequestEventFixture :: PullRequestEvent+pullRequestEventFixture = PullRequestEvent+    { evPullReqAction = PullRequestOpenedAction+    , evPullReqNumber = 1+    , evPullReqPayload =+        HookPullRequest+          { whPullReqUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1"+          , whPullReqId = 34778301+          , whPullReqHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/pull/1"+          , whPullReqDiffUrl = URL "https://github.com/baxterthehacker/public-repo/pull/1.diff"+          , whPullReqPatchUrl = URL "https://github.com/baxterthehacker/public-repo/pull/1.patch"+          , whPullReqIssueUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/1"+          , whPullReqNumber = 1+          , whPullReqState = "open"+          , whPullReqIsLocked = False+          , whPullReqTitle = "Update the README with new information"+          , whPullReqUser =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whPullReqBody = "This is a pretty simple change that we need to pull into master."+          , whPullReqCreatedAt = read "2015-05-05 23:40:27"+          , whPullReqUpdatedAt = read "2015-05-05 23:40:27"+          , whPullReqClosedAt = Nothing+          , whPullReqMergedAt = Nothing+          , whPullReqMergeCommitSha = Nothing+          , whPullReqAssignee = Nothing+          , whPullReqMilestone = Nothing+          , whPullReqCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits"+          , whPullReqRevCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments"+          , whPullReqRevCommentUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}"+          , whPullReqCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments"+          , whPullReqStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"+          , whPullReqCommentCount = Just 0+          , whPullReqRevCommentCount = Just 0+          , whPullReqCommitCount = Just 1+          , whPullReqAdditionsCount = Just 1+          , whPullReqDeletionsCount = Just 1+          , whPullReqFileChangeCount = Just 1+          }+    , evPullReqRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:26"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 1+          , whRepoDefaultBranchName = "master"+          }+    , evPullReqSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    , evPullReqInstallationId = 234+    }++pullRequestReviewCommentEventFixture :: PullRequestReviewCommentEvent+pullRequestReviewCommentEventFixture = PullRequestReviewCommentEvent+    { evPullReqRevComAction = PullRequestReviewCommentCreatedAction+    , evPullReqRevComment =+        HookPullRequestReviewComment+          { whPullReqRevComUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments/29724692"+          , whPullReqRevComId = 29724692+          , whPullReqRevComDiffHunk = "@@ -1 +1 @@\n-# public-repo"+          , whPullReqRevComPath = "README.md"+          , whPullReqRevComPos = 1+          , whPullReqRevComOrigPos = 1+          , whPullReqRevComCommitSha = "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"+          , whPullReqRevComOrigSha = "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"+          , whPullReqRevComUser =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whPullReqRevComBody = "Maybe you should use more emojji on this line."+          , whPullReqRevComCreatedAt = read "2015-05-05 23:40:27"+          , whPullReqRevComUpdatedAt = read "2015-05-05 23:40:27"+          , whPullReqRevComHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/pull/1#discussion_r29724692"+          , whPullReqRevComPullReqUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1"+          }+    , evPullReqRevTarget =+        HookPullRequest+          { whPullReqUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1"+          , whPullReqId = 34778301+          , whPullReqHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/pull/1"+          , whPullReqDiffUrl = URL "https://github.com/baxterthehacker/public-repo/pull/1.diff"+          , whPullReqPatchUrl = URL "https://github.com/baxterthehacker/public-repo/pull/1.patch"+          , whPullReqIssueUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/1"+          , whPullReqNumber = 1+          , whPullReqState = "open"+          , whPullReqIsLocked = False+          , whPullReqTitle = "Update the README with new information"+          , whPullReqUser =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whPullReqBody = "This is a pretty simple change that we need to pull into master."+          , whPullReqCreatedAt = read "2015-05-05 23:40:27"+          , whPullReqUpdatedAt = read "2015-05-05 23:40:27"+          , whPullReqClosedAt = Nothing+          , whPullReqMergedAt = Nothing+          , whPullReqMergeCommitSha = Just "18721552ba489fb84e12958c1b5694b5475f7991"+          , whPullReqAssignee = Nothing+          , whPullReqMilestone = Nothing+          , whPullReqCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits"+          , whPullReqRevCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments"+          , whPullReqRevCommentUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}"+          , whPullReqCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments"+          , whPullReqStatusesUrl =+              URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"+          , whPullReqCommentCount = Nothing+          , whPullReqRevCommentCount = Nothing+          , whPullReqCommitCount = Nothing+          , whPullReqAdditionsCount = Nothing+          , whPullReqDeletionsCount = Nothing+          , whPullReqFileChangeCount = Nothing+          }+    , evPullReqRevRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 1+          , whRepoDefaultBranchName = "master"+          }+    , evPullReqRevSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++pullRequestReviewEventFixture :: PullRequestReviewEvent+pullRequestReviewEventFixture = PullRequestReviewEvent+    { evPullReqReviewAction = PullRequestReviewSubmittedAction+    , evPullReqReviewPayload =+        HookPullRequestReview+          { whPullReqReviewId = 2626884+          , whPullReqReviewUser =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whPullReqReviewBody = "Looks great!"+          , whPullReqReviewSubmittedAt = read "2016-10-03 23:39:09"+          , whPullReqReviewState = "approved"+          , whPullReqReviewHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/pull/8#pullrequestreview-2626884"+          , whPullReqReviewPullUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8"+          }+    , evPullReqReviewTarget =+        HookPullRequest+          { whPullReqUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8"+          , whPullReqId = 87811438+          , whPullReqHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/pull/8"+          , whPullReqDiffUrl = URL "https://github.com/baxterthehacker/public-repo/pull/8.diff"+          , whPullReqPatchUrl = URL "https://github.com/baxterthehacker/public-repo/pull/8.patch"+          , whPullReqIssueUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/8"+          , whPullReqNumber = 8+          , whPullReqState = "open"+          , whPullReqIsLocked = False+          , whPullReqTitle = "Add a README description"+          , whPullReqUser =+              HookUser+                { whUserLogin = "skalnik"+                , whUserId = 2546+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/2546?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/skalnik"+                , whUserHtmlUrl = URL "https://github.com/skalnik"+                , whUserFollowersUrl = URL "https://api.github.com/users/skalnik/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/skalnik/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/skalnik/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/skalnik/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/skalnik/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/skalnik/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/skalnik/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/skalnik/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/skalnik/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = True+                }+          , whPullReqBody = "Just a few more details"+          , whPullReqCreatedAt = read "2016-10-03 23:37:43"+          , whPullReqUpdatedAt = read "2016-10-03 23:39:09"+          , whPullReqClosedAt = Nothing+          , whPullReqMergedAt = Nothing+          , whPullReqMergeCommitSha = Just "faea154a7decef6819754aab0f8c0e232e6c8b4f"+          , whPullReqAssignee = Nothing+          , whPullReqMilestone = Nothing+          , whPullReqCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/commits"+          , whPullReqRevCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/comments"+          , whPullReqRevCommentUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}"+          , whPullReqCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/8/comments"+          , whPullReqStatusesUrl =+              URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/b7a1f9c27caa4e03c14a88feb56e2d4f7500aa63"+          , whPullReqCommentCount = Nothing+          , whPullReqRevCommentCount = Nothing+          , whPullReqCommitCount = Nothing+          , whPullReqAdditionsCount = Nothing+          , whPullReqDeletionsCount = Nothing+          , whPullReqFileChangeCount = Nothing+          }+    , evPullReqReviewRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2016-08-15 17:19:01"+          , whRepoPushedAt = read "2016-10-03 23:37:43"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 233+          , whRepoStargazersCount = 2+          , whRepoWatchersCount = 2+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 2+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 5+          , whRepoDefaultBranchName = "master"+          }+    , evPullReqReviewSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++pushEventFixture :: PushEvent+pushEventFixture = PushEvent+    { evPushRef = "refs/heads/changes"+    , evPushHeadSha = Just "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"+    , evPushBeforeSha = Just "9049f1265b7d61be4a8904a9a27120d2064dab3b"+    , evPushCreated = False+    , evPushDeleted = False+    , evPushForced = False+    , evPushBaseRef = Nothing+    , evPushCompareUrl = URL "https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f"+    , evPushCommits =+        Just $ V.fromList+          [ HookCommit+              { whCommitSha = "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"+              , whCommitUrl = URL "https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"+              , whCommitHtmlUrl = Nothing+              , whCommitCommentsUrl = Nothing+              , whCommitAuthor =+                  Left+                    HookSimpleUser+                      { whSimplUserName = "baxterthehacker"+                      , whSimplUserEmail = "baxterthehacker@users.noreply.github.com"+                      , whSimplUserLogin = Just "baxterthehacker"+                      }+              , whCommitCommitter =+                  Left+                    HookSimpleUser+                      { whSimplUserName = "baxterthehacker"+                      , whSimplUserEmail = "baxterthehacker@users.noreply.github.com"+                      , whSimplUserLogin = Just "baxterthehacker"+                      }+              }+          ]+    , evPushHeadCommit =+        Just+          HookCommit+            { whCommitSha = "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"+            , whCommitUrl = URL "https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"+            , whCommitHtmlUrl = Nothing+            , whCommitCommentsUrl = Nothing+            , whCommitAuthor =+                Left+                  HookSimpleUser+                    { whSimplUserName = "baxterthehacker"+                    , whSimplUserEmail = "baxterthehacker@users.noreply.github.com"+                    , whSimplUserLogin = Just "baxterthehacker"+                    }+            , whCommitCommitter =+                Left+                  HookSimpleUser+                    { whSimplUserName = "baxterthehacker"+                    , whSimplUserEmail = "baxterthehacker@users.noreply.github.com"+                    , whSimplUserLogin = Just "baxterthehacker"+                    }+            }+    , evPushRepository =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Left+                HookSimpleUser+                  { whSimplUserName = "baxterthehacker" , whSimplUserEmail = "baxterthehacker@users.noreply.github.com" , whSimplUserLogin = Nothing }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:12"+          , whRepoPushedAt = read "2015-05-05 23:40:17"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 0+          , whRepoDefaultBranchName = "master"+          }+    , evPushOrganization = Nothing+    , evPushSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++releaseEventFixture :: ReleaseEvent+releaseEventFixture = ReleaseEvent+    { evReleaseEventAction = ReleasePublishedAction+    , evReleaseEventPayload =+        HookRelease+          { whReleaseUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases/1261438"+          , whReleaseAssetsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases/1261438/assets"+          , whReleaseUploadUrl = URL "https://uploads.github.com/repos/baxterthehacker/public-repo/releases/1261438/assets{?name}"+          , whReleaseHtmlUrl = URL "https://github.com/baxterthehacker/public-repo/releases/tag/0.0.1"+          , whReleaseId = 1261438+          , whReleaseTagName = "0.0.1"+          , whReleaseTargetCommitish = "master"+          , whReleaseName = Nothing+          , whReleaseIsDraft = False+          , whReleaseAuthor =+              HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whReleaseIsPreRelease = False+          , whReleaseCreatedAt = read "2015-05-05 23:40:12"+          , whReleasePublishedAt = Just $ read "2015-05-05 23:40:38"+          , whReleaseTarballUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tarball/0.0.1"+          , whReleaseZipballUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/zipball/0.0.1"+          , whReleaseBody = Nothing+          }+    , evReleaseEventRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:38"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evReleaseEventSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++repositoryEventFixture :: RepositoryEvent+repositoryEventFixture = RepositoryEvent+    { evRepositoryAction = RepositoryCreatedAction+    , evRepositoryTarget =+        HookRepository+          { whRepoId = 27496774+          , whRepoName = "new-repository"+          , whRepoFullName = "baxterandthehackers/new-repository"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterandthehackers"+                , whUserId = 7649605+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterandthehackers"+                , whUserHtmlUrl = URL "https://github.com/baxterandthehackers"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterandthehackers/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterandthehackers/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterandthehackers/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterandthehackers/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterandthehackers/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterandthehackers/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterandthehackers/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterandthehackers/received_events"+                , whUserType = OwnerOrganization+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = True+          , whRepoHtmlUrl = URL "https://github.com/baxterandthehackers/new-repository"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/issues/comments/{number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/milestones{/number}"+          , whRepoNotificationsUrl =+              URL "https://api.github.com/repos/baxterandthehackers/new-repository/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterandthehackers/new-repository/releases{/id}"+          , whRepoCreatedAt = read "2014-12-03 16:39:25"+          , whRepoUpdatedAt = read "2014-12-03 16:39:25"+          , whRepoPushedAt = read "2014-12-03 16:39:25"+          , whRepoGitUrl = URL "git://github.com/baxterandthehackers/new-repository.git"+          , whRepoSshUrl = URL "git@github.com:baxterandthehackers/new-repository.git"+          , whRepoCloneUrl = URL "https://github.com/baxterandthehackers/new-repository.git"+          , whRepoSvnUrl = URL "https://github.com/baxterandthehackers/new-repository"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = False+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 0+          , whRepoDefaultBranchName = "master"+          }+    , evRepositoryOrg =+        Just+          HookOrganization+            { whOrgLogin = "baxterandthehackers"+            , whOrgId = 7649605+            , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+            , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+            , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+            , whOrgHooksUrl = Nothing+            , whOrgIssuesUrl = Nothing+            , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+            , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+            , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=2"+            , whOrgDescription = T.empty+            }+    , evRepositorySender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=2"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++statusEventFixture :: StatusEvent+statusEventFixture = StatusEvent+    { evStatusId = 214015194+    , evStatusCommitSha = "9049f1265b7d61be4a8904a9a27120d2064dab3b"+    , evStatusCommitName = "baxterthehacker/public-repo"+    , evStatusTargetUrl = Nothing+    , evStatusContext = "default"+    , evStatusDescription = Nothing+    , evStatusState = StatusSuccessState+    , evStatusCommit =+        HookCommit+          { whCommitSha = "9049f1265b7d61be4a8904a9a27120d2064dab3b"+          , whCommitUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b"+          , whCommitHtmlUrl = Just $ URL "https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b"+          , whCommitCommentsUrl =+              Just $ URL "https://api.github.com/repos/baxterthehacker/public-repo/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b/comments"+          , whCommitAuthor =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whCommitCommitter =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          }+    , evStatusCreatedAt = read "2015-05-05 23:40:39"+    , evStatusUpdatedAt = read "2015-05-05 23:40:39"+    , evStatusRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:39"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evStatusSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++teamAddEventFixture :: TeamAddEvent+teamAddEventFixture = TeamAddEvent+    { evTeamAddTarget =+        Just+          HookTeam+            { whTeamName = "github"+            , whTeamId = 836012+            , whTeamSlug = "github"+            , whTeamPermission = "pull"+            , whTeamUrl = URL "https://api.github.com/teams/836012"+            , whTeamMembersUrl = URL "https://api.github.com/teams/836012/members{/member}"+            , whTeamRepositoriesUrl = URL "https://api.github.com/teams/836012/repos"+            }+    , evTeamAddRepo =+        HookRepository+          { whRepoId = 35129393+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterandthehackers/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterandthehackers"+                , whUserId = 7649605+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterandthehackers"+                , whUserHtmlUrl = URL "https://github.com/baxterandthehackers"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterandthehackers/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterandthehackers/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterandthehackers/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterandthehackers/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterandthehackers/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterandthehackers/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterandthehackers/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterandthehackers/received_events"+                , whUserType = OwnerOrganization+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterandthehackers/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = True+          , whRepoUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:30"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterandthehackers/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterandthehackers/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterandthehackers/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterandthehackers/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = False+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 0+          , whRepoDefaultBranchName = "master"+          }+    , evTeamAddOrg =+        HookOrganization+          { whOrgLogin = "baxterandthehackers"+          , whOrgId = 7649605+          , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+          , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+          , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+          , whOrgHooksUrl = Nothing+          , whOrgIssuesUrl = Nothing+          , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+          , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+          , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+          , whOrgDescription = T.empty+          }+    , evTeamAddSender =+        HookUser+          { whUserLogin = "baxterandthehackers"+          , whUserId = 7649605+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/7649605?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterandthehackers"+          , whUserHtmlUrl = URL "https://github.com/baxterandthehackers"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterandthehackers/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterandthehackers/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterandthehackers/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterandthehackers/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterandthehackers/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterandthehackers/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterandthehackers/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterandthehackers/received_events"+          , whUserType = OwnerOrganization+          , whUserIsAdminOfSite = False+          }+    }++teamEventFixture :: TeamEvent+teamEventFixture = TeamEvent+    { evTeamAction = TeamCreatedAction+    , evTeamTarget =+        HookTeam+          { whTeamName = "team baxter"+          , whTeamId = 2175394+          , whTeamSlug = "team-baxter"+          , whTeamPermission = "pull"+          , whTeamUrl = URL "https:/api.github.com/teams/2175394"+          , whTeamMembersUrl = URL "https:/api.github.com/teams/2175394/members{/member}"+          , whTeamRepositoriesUrl = URL "https:/api.github.com/teams/2175394/repos"+          }+    , evTeamOrganization =+        HookOrganization+          { whOrgLogin = "baxterandthehackers"+          , whOrgId = 4312013+          , whOrgUrl = URL "https://api.github.com/orgs/baxterandthehackers"+          , whOrgReposUrl = URL "https://api.github.com/orgs/baxterandthehackers/repos"+          , whOrgEventsUrl = URL "https://api.github.com/orgs/baxterandthehackers/events"+          , whOrgHooksUrl = Just $ URL "https://api.github.com/orgs/baxterandthehackers/hooks"+          , whOrgIssuesUrl = Just $ URL "https://api.github.com/orgs/baxterandthehackers/issues"+          , whOrgMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/members{/member}"+          , whOrgPublicMembersUrl = URL "https://api.github.com/orgs/baxterandthehackers/public_members{/member}"+          , whOrgAvatarUrl = URL "https://avatars.githubusercontent.com/u/4312013?v=3"+          , whOrgDescription = T.empty+          }+    , evTeamSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }++watchEventFixture :: WatchEvent+watchEventFixture = WatchEvent+    { evWatchAction = WatchStartedAction+    , evWatchRepo =+        HookRepository+          { whRepoId = 35129377+          , whRepoName = "public-repo"+          , whRepoFullName = "baxterthehacker/public-repo"+          , whRepoOwner =+              Right HookUser+                { whUserLogin = "baxterthehacker"+                , whUserId = 6752317+                , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+                , whUserGravatarId = URL ""+                , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+                , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+                , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+                , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+                , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+                , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+                , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+                , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+                , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+                , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+                , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+                , whUserType = OwnerUser+                , whUserIsAdminOfSite = False+                }+          , whRepoIsPrivate = False+          , whRepoHtmlUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoDescription = ""+          , whRepoIsAFork = False+          , whRepoUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo"+          , whRepoForksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/forks"+          , whRepoKeysUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}"+          , whRepoCollaboratorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}"+          , whRepoTeamsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/teams"+          , whRepoHooksUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/hooks"+          , whRepoIssueEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}"+          , whRepoEventsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/events"+          , whRepoAssigneesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}"+          , whRepoBranchesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}"+          , whRepoTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/tags"+          , whRepoBlobsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}"+          , whRepoGitTagsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}"+          , whRepoGitRefsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}"+          , whRepoTreesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}"+          , whRepoStatusesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}"+          , whRepoLanguagesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/languages"+          , whRepoStargazersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/stargazers"+          , whRepoContributorsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contributors"+          , whRepoSubscribersUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscribers"+          , whRepoSubscriptionUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/subscription"+          , whRepoCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}"+          , whRepoGitCommitsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}"+          , whRepoCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}"+          , whRepoIssueCommentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}"+          , whRepoContentsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}"+          , whRepoCompareUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}"+          , whRepoMergesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/merges"+          , whRepoArchiveUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}"+          , whRepoDownloadsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/downloads"+          , whRepoIssuesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}"+          , whRepoPullsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}"+          , whRepoMilestonesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}"+          , whRepoNotificationsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}"+          , whRepoLabelsUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}"+          , whRepoReleasesUrl = URL "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}"+          , whRepoCreatedAt = read "2015-05-05 23:40:12"+          , whRepoUpdatedAt = read "2015-05-05 23:40:30"+          , whRepoPushedAt = read "2015-05-05 23:40:27"+          , whRepoGitUrl = URL "git://github.com/baxterthehacker/public-repo.git"+          , whRepoSshUrl = URL "git@github.com:baxterthehacker/public-repo.git"+          , whRepoCloneUrl = URL "https://github.com/baxterthehacker/public-repo.git"+          , whRepoSvnUrl = URL "https://github.com/baxterthehacker/public-repo"+          , whRepoHomepage = Nothing+          , whRepoSize = 0+          , whRepoStargazersCount = 0+          , whRepoWatchersCount = 0+          , whRepoLanguage = Nothing+          , whRepoHasIssues = True+          , whRepoHasDownloads = True+          , whRepoHasWiki = True+          , whRepoHasPages = True+          , whRepoForkCount = 0+          , whRepoMirrorUrl = Nothing+          , whRepoOpenIssuesCount = 2+          , whRepoDefaultBranchName = "master"+          }+    , evWatchSender =+        HookUser+          { whUserLogin = "baxterthehacker"+          , whUserId = 6752317+          , whUserAvatarUrl = URL "https://avatars.githubusercontent.com/u/6752317?v=3"+          , whUserGravatarId = URL ""+          , whUserUrl = URL "https://api.github.com/users/baxterthehacker"+          , whUserHtmlUrl = URL "https://github.com/baxterthehacker"+          , whUserFollowersUrl = URL "https://api.github.com/users/baxterthehacker/followers"+          , whUserFollowingUrl = URL "https://api.github.com/users/baxterthehacker/following{/other_user}"+          , whUserGistsUrl = URL "https://api.github.com/users/baxterthehacker/gists{/gist_id}"+          , whUserStarredUrl = URL "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}"+          , whUserSubscriptionsUrl = URL "https://api.github.com/users/baxterthehacker/subscriptions"+          , whUserOrganizationsUrl = URL "https://api.github.com/users/baxterthehacker/orgs"+          , whUserReposUrl = URL "https://api.github.com/users/baxterthehacker/repos"+          , whUserEventsUrl = URL "https://api.github.com/users/baxterthehacker/events{/privacy}"+          , whUserReceivedEventsUrl = URL "https://api.github.com/users/baxterthehacker/received_events"+          , whUserType = OwnerUser+          , whUserIsAdminOfSite = False+          }+    }
+ spec/Spec.hs view
@@ -0,0 +1,1 @@+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
+ src/GitHub/Data/Webhooks/Events.hs view
@@ -0,0 +1,1434 @@+--+module GitHub.Data.Webhooks.Events+    ( EventHasSender(..)+    , EventHasRepo(..)+      --+    , CommitCommentEvent(..)+    , CommitCommentEventAction(..)+      --+    , CreateEvent(..)+      --+    , DeleteEvent(..)+      --+    , DeploymentEvent(..)+      --+    , DeploymentStatusEvent(..)+      -- Deprecated events+    , DownloadEvent(..)+    , FollowEvent(..)+    , ForkEvent(..)+    , ForkApplyEvent(..)+    , GistEvent(..)+      --+    , GollumEvent(..)+      --+    , InstallationEvent(..)+    , InstallationEventAction(..)+      --+    , InstallationRepositoriesEvent(..)+    , InstallationRepoEventAction(..)+      --+    , IssueCommentEvent(..)+    , IssueCommentEventAction(..)+      --+    , IssuesEvent(..)+    , IssuesEventAction(..)+      --+    , LabelEvent(..)+    , LabelEventAction(..)+      --+    , MemberEvent(..)+    , MemberEventAction(..)+      --+    , MembershipEvent(..)+    , MembershipEventAction(..)+      --+    , MilestoneEvent(..)+    , MilestoneEventAction(..)+      --+    , OrganizationEvent(..)+    , OrganizationEventAction(..)+      --+    , OrgBlockEvent(..)+    , OrgBlockEventAction(..)+      --+    , PageBuildEvent(..)+      --+    , ProjectCardEvent(..)+    , ProjectCardEventAction(..)+      --+    , ProjectColumnEvent(..)+    , ProjectColumnEventAction(..)+      --+    , ProjectEvent(..)+    , ProjectEventAction(..)+      --+    , PublicEvent(..)+      --+    , PullRequestEvent(..)+    , PullRequestEventAction(..)+      --+    , PullRequestReviewEvent(..)+    , PullRequestReviewEventAction(..)+      --+    , PullRequestReviewCommentEvent(..)+    , PullRequestReviewCommentEventAction(..)+      --+    , PushEvent(..)+      --+    , ReleaseEvent(..)+    , ReleaseEventAction(..)+      --+    , RepositoryEvent(..)+    , RepositoryEventAction(..)+      --+    , StatusEvent(..)+    , StatusEventState(..)+      --+    , TeamEvent(..)+    , TeamEventAction(..)+      --+    , TeamAddEvent(..)+      --+    , WatchEvent(..)+    , WatchEventAction(..)+    ) where++import           Data.Aeson               (FromJSON(..), withObject, withText, (.:), (.:?))+import           Control.DeepSeq          (NFData(..))+import           Control.DeepSeq.Generics (genericRnf)+import           Data.Data                (Data, Typeable)+import           Data.Time                (UTCTime)+import           Data.Text                (Text)+import           Data.Vector              (Vector)+import           GHC.Generics             (Generic)++import           GitHub.Data.Webhooks.Payload+++class EventHasSender eventKind where+    -- | Provides the sender context of a Webhook event.+    senderOfEvent :: eventKind -> HookUser++class EventHasRepo eventKind where+    -- | Provides the repository context of a Webhook event.+    repoForEvent :: eventKind -> HookRepository+++data CommitCommentEventAction+    -- | Decodes from "created"+    = CommitCommentActionCreated+    -- | The result of decoding an unknown commit comment event action type+    | CommitCommentActionOther !Text+    deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData CommitCommentEventAction where rnf = genericRnf++instance FromJSON CommitCommentEventAction where+  parseJSON = withText "Commit comment event action" $ \t ->+      case t of+          "created"       -> pure CommitCommentActionCreated+          _               -> pure (CommitCommentActionOther t)++-- | Triggered when a commit comment is created.+-- See <https://developer.github.com/v3/activity/events/types/#commitcommentevent>.+data CommitCommentEvent = CommitCommentEvent+    { evCommitCommentAction     :: !CommitCommentEventAction+    , evCommitCommentPayload    :: !HookCommitComment+    , evCommitCommentRepo       :: !HookRepository+    , evCommitCommentSender     :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender CommitCommentEvent where senderOfEvent = evCommitCommentSender+instance EventHasRepo CommitCommentEvent where repoForEvent = evCommitCommentRepo+instance NFData CommitCommentEvent where rnf = genericRnf+++-- | Represents a created repository, branch, or tag.+-- Note: webhooks will not receive this event for created repositories.+-- Additionally, webhooks will not receive this event for tags if more than three tags are pushed at once.+-- See <https://developer.github.com/v3/activity/events/types/#createevent>.+data CreateEvent = CreateEvent+    { evCreateRef               :: !Text+    , evCreateRefType           :: !Text+    , evCreateMasterBranch      :: !Text+    , evCreateDescription       :: !Text+    , evCreatePusherType        :: !OwnerType+    , evCreateRepo              :: !HookRepository+    , evCreateSender            :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender CreateEvent where senderOfEvent = evCreateSender+instance EventHasRepo CreateEvent where repoForEvent = evCreateRepo+instance NFData CreateEvent where rnf = genericRnf+++-- | Represents a deleted branch or tag.+-- Note: webhooks will not receive this event for tags if more than three tags are deleted at once.+-- See <https://developer.github.com/v3/activity/events/types/#deleteevent>.+data DeleteEvent = DeleteEvent+    { evDeleteRef               :: !Text+    , evDeleteRefType           :: !Text+    , evDeletePusherType        :: !OwnerType+    , evDeleteRepo              :: !HookRepository+    , evDeleteSender            :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender DeleteEvent where senderOfEvent = evDeleteSender+instance EventHasRepo DeleteEvent where repoForEvent = evDeleteRepo+instance NFData DeleteEvent where rnf = genericRnf+++-- | Represents a deployment.+-- Events of this type are not visible in timelines. These events are only used to trigger hooks.+-- See <https://developer.github.com/v3/activity/events/types/#deploymentevent>.+data DeploymentEvent = DeploymentEvent+    { evDeploymentInfo          :: !HookDeployment+    , evDeploymentRepo          :: !HookRepository+    , evDeploymentSender        :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender DeploymentEvent where senderOfEvent = evDeploymentSender+instance EventHasRepo DeploymentEvent where repoForEvent = evDeploymentRepo+instance NFData DeploymentEvent where rnf = genericRnf+++-- | Represents a deployment status.+-- Events of this type are not visible in timelines. These events are only used to trigger hooks.+-- See <https://developer.github.com/v3/activity/events/types/#deploymentstatusevent>.+data DeploymentStatusEvent = DeploymentStatusEvent+    { evDeplStatusInfo          :: !HookDeploymentStatus+    , evDeplStatusDeployment    :: !HookDeployment+    , evDeplStatusRepo          :: !HookRepository+    , evDeplStatusSender        :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender DeploymentStatusEvent where senderOfEvent = evDeplStatusSender+instance EventHasRepo DeploymentStatusEvent where repoForEvent = evDeplStatusRepo+instance NFData DeploymentStatusEvent where rnf = genericRnf+++-- | Triggered when a new download is created.+-- Events of this kind are no longer delivered.+-- See <https://developer.github.com/v3/activity/events/types/#downloadevent>.+data DownloadEvent = DownloadEvent++-- | Triggered when a user follows another user.+-- Events of this kind are no longer delivered.+-- See <https://developer.github.com/v3/activity/events/types/#downloadevent>.+data FollowEvent = FollowEvent++-- | Triggered when a user forks a repository.+-- See <https://developer.github.com/v3/activity/events/types/#forkevent>.+data ForkEvent = ForkEvent+    { evForkDestination         :: !HookRepository+    , evForkSource              :: !HookRepository+    , evForkSender              :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender ForkEvent where senderOfEvent = evForkSender+instance EventHasRepo ForkEvent where repoForEvent = evForkSource+instance NFData ForkEvent where rnf = genericRnf+++-- | Triggered when a patch is applied in the Fork Queue.+-- Events of this kind are no longer delivered.+-- See <https://developer.github.com/v3/activity/events/types/#forkapplyevent>.+data ForkApplyEvent = ForkApplyEvent+++-- | Triggered when a Gist is created or updated.+-- Events of this kind are no longer delivered.+-- See <https://developer.github.com/v3/activity/events/types/#gistevent>.+data GistEvent = GistEvent+++-- | Triggered when a Wiki page is created or updated.+-- See <https://developer.github.com/v3/activity/events/types/#gollumevent>.+data GollumEvent = GollumEvent+    { evGollumPages             :: !(Vector HookWikiPage)+    , evGollumRepo              :: !HookRepository+    , evGollumSender            :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender GollumEvent where senderOfEvent = evGollumSender+instance EventHasRepo GollumEvent where repoForEvent = evGollumRepo+instance NFData GollumEvent where rnf = genericRnf+++data InstallationEventAction+  -- | Decodes from "created"+  = InstallationCreatedAction+  -- | Decodes from "deleted"+  | InstallationDeletedAction+  -- | The result of decoding an unknown installation event action type+  | InstallationActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData InstallationEventAction where rnf = genericRnf++instance FromJSON InstallationEventAction where+  parseJSON = withText "Installation event action" $ \t ->+    case t of+        "created"       -> pure InstallationCreatedAction+        "deleted"       -> pure InstallationDeletedAction+        _               -> pure (InstallationActionOther t)++-- | Triggered when a GitHub App has been installed or uninstalled.+-- See <https://developer.github.com/v3/activity/events/types/#installationevent>.+data InstallationEvent = InstallationEvent+    { evInstallationAction      :: !InstallationEventAction+    , evInstallationInfo        :: !HookInstallation+    , evInstallationSender      :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender InstallationEvent where senderOfEvent = evInstallationSender+instance NFData InstallationEvent where rnf = genericRnf+++data InstallationRepoEventAction+  -- | Decodes from "created"+  = InstallationRepoCreatedAction+  -- | Decodes from "removed"+  | InstallationRepoRemovedAction+  -- | The result of decoding an unknown installation repo event action type+  | InstallationRepoActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData InstallationRepoEventAction where rnf = genericRnf++instance FromJSON InstallationRepoEventAction where+  parseJSON = withText "Installation repo event action" $ \t ->+    case t of+        "created"       -> pure InstallationRepoCreatedAction+        "removed"       -> pure InstallationRepoRemovedAction+        _               -> pure (InstallationRepoActionOther t)++-- | Triggered when a repository is added or removed from an installation.+-- See <https://developer.github.com/v3/activity/events/types/#installationrepositoriesevent>.+data InstallationRepositoriesEvent = InstallationRepositoriesEvent+    { evInstallationRepoAction  :: !InstallationRepoEventAction+    , evInstallationRepoInfo    :: !HookInstallation+    , evInstallationRepoSel     :: !Text+    , evInstallationReposAdd    :: !(Vector HookRepositorySimple)+    , evInstallationReposRemove :: !(Vector HookRepositorySimple)+    , evInstallationReposSender :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender InstallationRepositoriesEvent where senderOfEvent = evInstallationReposSender+instance NFData InstallationRepositoriesEvent where rnf = genericRnf+++data IssueCommentEventAction+  -- | Decodes from "created"+  = IssueCommentCreatedAction+  -- | Decodes from "edited"+  | IssueCommentEditedAction+  -- | Decodes from "deleted"+  | IssueCommentDeletedAction+  -- | The result of decoding an unknown issue comment event action type+  | IssueCommentActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData IssueCommentEventAction where rnf = genericRnf++instance FromJSON IssueCommentEventAction where+  parseJSON = withText "Issue comment event action" $ \t ->+    case t of+        "created"       -> pure IssueCommentCreatedAction+        "edited"        -> pure IssueCommentEditedAction+        "deleted"       -> pure IssueCommentDeletedAction+        _               -> pure (IssueCommentActionOther t)++-- | Triggered when an issue comment is created, edited, or deleted.+-- See <https://developer.github.com/v3/activity/events/types/#issuecommentevent>.+data IssueCommentEvent = IssueCommentEvent+    { evIssueCommentAction      :: !IssueCommentEventAction+    , evIssueCommentIssue       :: !HookIssue+    , evIssueCommentPayload     :: !HookIssueComment+    , evIssueCommentRepo        :: !HookRepository+    , evIssueCommentSender      :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender IssueCommentEvent where senderOfEvent = evIssueCommentSender+instance EventHasRepo IssueCommentEvent where repoForEvent = evIssueCommentRepo+instance NFData IssueCommentEvent where rnf = genericRnf+++data IssuesEventAction+  -- | Decodes from "assigned"+  = IssuesAssignedAction+  -- | Decodes from "unassigned"+  | IssuesUnassignedAction+  -- | Decodes from "labeled"+  | IssuesLabeledAction+  -- | Decodes from "unlabeled"+  | IssuesUnlabeledAction+  -- | Decodes from "opened"+  | IssuesOpenedAction+  -- | Decodes from "edited"+  | IssuesEditedAction+  -- | Decodes from "milestoned"+  | IssuesMilestonedAction+  -- | Decodes from "demilestoned"+  | IssuesDemilestonedAction+  -- | Decodes from "closed"+  | IssuesClosedAction+  -- | Decodes from "reopened"+  | IssuesReopenedAction+  -- | The result of decoding an unknown issue comment event action type+  | IssuesActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData IssuesEventAction where rnf = genericRnf++instance FromJSON IssuesEventAction where+  parseJSON = withText "Issue comment event action" $ \t ->+    case t of+        "assigned"      -> pure IssuesAssignedAction+        "unassigned"    -> pure IssuesUnassignedAction+        "labeled"       -> pure IssuesLabeledAction+        "unlabeled"     -> pure IssuesUnlabeledAction+        "opened"        -> pure IssuesOpenedAction+        "edited"        -> pure IssuesEditedAction+        "milestoned"    -> pure IssuesMilestonedAction+        "demilestoned"  -> pure IssuesDemilestonedAction+        "closed"        -> pure IssuesClosedAction+        "reopened"      -> pure IssuesReopenedAction+        _               -> pure (IssuesActionOther t)++-- | Triggered when an issue is assigned, unassigned, labeled,+--  unlabeled, opened, edited, milestoned, demilestoned, closed, or reopened.+-- See <https://developer.github.com/v3/activity/events/types/#issuesevent>.+data IssuesEvent = IssuesEvent+    { evIssuesEventAction       :: !IssuesEventAction+    , evIssuesEventIssue        :: !HookIssue+    , evIssuesEventRepo         :: !HookRepository+    , evIssuesEventSender       :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender IssuesEvent where senderOfEvent = evIssuesEventSender+instance EventHasRepo IssuesEvent where repoForEvent = evIssuesEventRepo+instance NFData IssuesEvent where rnf = genericRnf+++data LabelEventAction+  -- | Decodes from "created"+  = LabelCreatedAction+  -- | Decodes from "edited"+  | LabelEditedAction+  -- | Decodes from "deleted"+  | LabelDeletedAction+  -- | The result of decoding an unknown label event action type+  | LabelActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData LabelEventAction where rnf = genericRnf++instance FromJSON LabelEventAction where+  parseJSON = withText "Label event action" $ \t ->+    case t of+        "created"       -> pure LabelCreatedAction+        "edited"        -> pure LabelEditedAction+        "deleted"       -> pure LabelDeletedAction+        _               -> pure (LabelActionOther t)++-- | Triggered when a repository's label is created, edited, or deleted.+-- Events of this type are not visible in timelines. These events are only used to trigger hooks.+-- See <https://developer.github.com/v3/activity/events/types/#labelevent>.+data LabelEvent = LabelEvent+    { evLabelEventAction        :: !LabelEventAction+    , evLabelEventPayload       :: !HookRepositoryLabel+    , evLabelEventRepo          :: !HookRepository+    , evLabelEventOrganization  :: !(Maybe HookOrganization)+    , evLabelEventSender        :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender LabelEvent where senderOfEvent = evLabelEventSender+instance EventHasRepo LabelEvent where repoForEvent = evLabelEventRepo+instance NFData LabelEvent where rnf = genericRnf+++data MemberEventAction+  -- | Decodes from "added"+  = MemberAddedAction+  -- | Decodes from "edited"+  | MemberEditedAction+  -- | Decodes from "deleted"+  | MemberDeletedAction+  -- | The result of decoding an unknown label event action type+  | MemberActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData MemberEventAction where rnf = genericRnf++instance FromJSON MemberEventAction where+  parseJSON = withText "Member event action" $ \t ->+    case t of+        "added"         -> pure MemberAddedAction+        "edited"        -> pure MemberEditedAction+        "deleted"       -> pure MemberDeletedAction+        _               -> pure (MemberActionOther t)++-- | Triggered when a user is added or removed as a collaborator to a repository, or has their permissions changed.+-- See <https://developer.github.com/v3/activity/events/types/#memberevent>.+data MemberEvent = MemberEvent+    { evMemberAction            :: !MemberEventAction+    , evMemberUser              :: !HookUser+    , evMemberRepo              :: !HookRepository+    , evMemberSender            :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender MemberEvent where senderOfEvent = evMemberSender+instance EventHasRepo MemberEvent where repoForEvent = evMemberRepo+instance NFData MemberEvent where rnf = genericRnf+++data MembershipEventAction+  -- | Decodes from "added"+  = MembershipAddedAction+  -- | Decodes from "removed"+  | MembershipRemovedAction+  -- | The result of decoding an unknown label event action type+  | MembershipActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData MembershipEventAction where rnf = genericRnf++instance FromJSON MembershipEventAction where+  parseJSON = withText "Membership event action" $ \t ->+    case t of+        "added"         -> pure MembershipAddedAction+        "removed"       -> pure MembershipRemovedAction+        _               -> pure (MembershipActionOther t)++-- | Triggered when a user is added or removed from a team.+-- Events of this type are not visible in timelines. These events are only used to trigger hooks.+-- See <https://developer.github.com/v3/activity/events/types/#membershipevent>.+data MembershipEvent = MembershipEvent+    { evMembershipAction        :: !MembershipEventAction+    , evMembershipScope         :: !Text        -- ^ Current can only be "team"+    , evMembershipUser          :: !HookUser+    , evMembershipTeam          :: !HookTeam+    , evMembershipOrg           :: !HookOrganization+    , evMembershipSender        :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender MembershipEvent where senderOfEvent = evMembershipSender+instance NFData MembershipEvent where rnf = genericRnf+++data MilestoneEventAction+  -- | Decodes from "created"+  = MilestoneCreatedAction+  -- | Decodes from "closed"+  | MilestoneClosedAction+  -- | Decodes from "opened"+  | MilestoneOpenedAction+  -- | Decodes from "edited"+  | MilestoneEditedAction+  -- | Decodes from "deleted"+  | MilestoneDeletedAction+  -- | The result of decoding an unknown label event action type+  | MilestoneActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData MilestoneEventAction where rnf = genericRnf++instance FromJSON MilestoneEventAction where+  parseJSON = withText "Milestone event action" $ \t ->+    case t of+        "created"       -> pure MilestoneCreatedAction+        "closed"        -> pure MilestoneClosedAction+        "opened"        -> pure MilestoneOpenedAction+        "edited"        -> pure MilestoneEditedAction+        "deleted"       -> pure MilestoneDeletedAction+        _               -> pure (MilestoneActionOther t)++-- | Triggered when a milestone is created, closed, opened, edited, or deleted.+-- Events of this type are not visible in timelines. These events are only used to trigger hooks.+-- See <https://developer.github.com/v3/activity/events/types/#milestoneevent>.+data MilestoneEvent = MilestoneEvent+    { evMilestoneAction         :: !MilestoneEventAction+    , evMilestoenPayload        :: !HookMilestone+    , evMilestoneRepo           :: !HookRepository+    , evMilestoneOrg            :: !HookOrganization+    , evMilestoneSender         :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender MilestoneEvent where senderOfEvent = evMilestoneSender+instance EventHasRepo MilestoneEvent where repoForEvent = evMilestoneRepo+instance NFData MilestoneEvent where rnf = genericRnf+++data OrganizationEventAction+  -- | Decodes from "member_added"+  = OrgMemberAddedAction+  -- | Decodes from "member_removed"+  | OrgMemberRemovedAction+  -- | Decodes from "member_invited"+  | OrgMemberInvitedAction+  -- | The result of decoding an unknown label event action type+  | OrgActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData OrganizationEventAction where rnf = genericRnf++instance FromJSON OrganizationEventAction where+  parseJSON = withText "Organization event action" $ \t ->+    case t of+        "member_added"   -> pure OrgMemberAddedAction+        "member_removed" -> pure OrgMemberRemovedAction+        "member_invited" -> pure OrgMemberInvitedAction+        _                -> pure (OrgActionOther t)++-- | Triggered when a user is added, removed, or invited to an Organization.+-- Events of this type are not visible in timelines. These events are only used to trigger organization hooks.+-- See <https://developer.github.com/v3/activity/events/types/#organizationevent>.+data OrganizationEvent = OrganizationEvent+    { evOrganizationAction      :: !OrganizationEventAction+    , evOrganizationInvitation  :: !HookOrganizationInvitation+    , evOrganizationMembership  :: !HookOrganizationMembership+    , evOrganizationOrg         :: !HookOrganization+    , evOrganizationSender      :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender OrganizationEvent where senderOfEvent = evOrganizationSender+instance NFData OrganizationEvent where rnf = genericRnf+++data OrgBlockEventAction+  -- | Decodes from "blocked"+  = OrgBlockBlockedAction+  -- | Decodes from "unblocked"+  | OrgBlockUnblockedAction+  -- | The result of decoding an unknown org block event action type+  | OrgBlockActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData OrgBlockEventAction where rnf = genericRnf++instance FromJSON OrgBlockEventAction where+  parseJSON = withText "Organization event action" $ \t ->+    case t of+        "blocked"       -> pure OrgBlockBlockedAction+        "unblocked"     -> pure OrgBlockUnblockedAction+        _               -> pure (OrgBlockActionOther t)++-- | Triggered when an organization blocks or unblocks a user.+-- See <https://developer.github.com/v3/activity/events/types/#orgblockevent>.+data OrgBlockEvent = OrgBlockEvent+    { evOrgBlockAction          :: !OrgBlockEventAction+    , evOrgBlockUser            :: !HookUser+    , evOrgBlockOrg             :: !HookOrganization+    , evOrgBlockSender          :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender OrgBlockEvent where senderOfEvent = evOrgBlockSender+instance NFData OrgBlockEvent where rnf = genericRnf+++-- | Represents an attempted build of a GitHub Pages site, whether successful or not.+-- Triggered on push to a GitHub Pages enabled branch (gh-pages for project pages, master for user and organization pages).+-- Events of this type are not visible in timelines. These events are only used to trigger hooks.+-- See <https://developer.github.com/v3/activity/events/types/#pagebuildevent>.+data PageBuildEvent = PageBuildEvent+    { evPageBuildId             :: !Int+    , evPageBuildResult         :: !HookPageBuildResult+    , evPageBuildRepo           :: !HookRepository+    , evPageBuildSender         :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender PageBuildEvent where senderOfEvent = evPageBuildSender+instance EventHasRepo PageBuildEvent where repoForEvent = evPageBuildRepo+instance NFData PageBuildEvent where rnf = genericRnf+++data ProjectCardEventAction+  -- | Decodes from "created"+  = ProjectCardCreatedAction+  -- | Decodes from "edited"+  | ProjectCardEditedAction+  -- | Decodes from "converted"+  | ProjectCardConvertedAction+  -- | Decodes from "moved"+  | ProjectCardMovedAction+  -- | Decodes from "deleted"+  | ProjectCardDeletedAction+  -- | The result of decoding an unknown project card event action type+  | ProjectCardActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData ProjectCardEventAction where rnf = genericRnf++instance FromJSON ProjectCardEventAction where+  parseJSON = withText "Project card event action" $ \t ->+    case t of+        "created"       -> pure ProjectCardCreatedAction+        "edited"        -> pure ProjectCardEditedAction+        "converted"     -> pure ProjectCardConvertedAction+        "moved"         -> pure ProjectCardMovedAction+        "deleted"       -> pure ProjectCardDeletedAction+        _               -> pure (ProjectCardActionOther t)++-- | Triggered when a project card is created, updated, moved, converted to an issue, or deleted.+-- See <https://developer.github.com/v3/activity/events/types/#projectcardevent>.+data ProjectCardEvent = ProjectCardEvent+    { evProjectCardAction       :: !ProjectCardEventAction+    , evProjectCardPayload      :: !HookProjectCard+    , evProjectCardRepo         :: !HookRepository+    , evProjectCardOrg          :: !HookOrganization+    , evProjectCardSender       :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender ProjectCardEvent where senderOfEvent = evProjectCardSender+instance EventHasRepo ProjectCardEvent where repoForEvent = evProjectCardRepo+instance NFData ProjectCardEvent where rnf = genericRnf+++data ProjectColumnEventAction+  -- | Decodes from "created"+  = ProjectColumnCreatedAction+  -- | Decodes from "edited"+  | ProjectColumnEditedAction+  -- | Decodes from "moved"+  | ProjectColumnMovedAction+  -- | Decodes from "deleted"+  | ProjectColumnDeletedAction+  -- | The result of decoding an unknown project card event action type+  | ProjectColumnActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData ProjectColumnEventAction where rnf = genericRnf++instance FromJSON ProjectColumnEventAction where+  parseJSON = withText "Project column event action" $ \t ->+    case t of+        "created"       -> pure ProjectColumnCreatedAction+        "edited"        -> pure ProjectColumnEditedAction+        "moved"         -> pure ProjectColumnMovedAction+        "deleted"       -> pure ProjectColumnDeletedAction+        _               -> pure (ProjectColumnActionOther t)++-- | Triggered when a project column is created, updated, moved, or deleted.+-- See <https://developer.github.com/v3/activity/events/types/#projectcolumnevent>.+data ProjectColumnEvent = ProjectColumnEvent+    { evProjectColumnAction     :: !ProjectColumnEventAction+    , evProjectColumnPayload    :: !HookProjectColumn+    , evProjectColumnRepo       :: !HookRepository+    , evProjectColumnOrg        :: !HookOrganization+    , evProjectColumnSender     :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender ProjectColumnEvent where senderOfEvent = evProjectColumnSender+instance EventHasRepo ProjectColumnEvent where repoForEvent = evProjectColumnRepo+instance NFData ProjectColumnEvent where rnf = genericRnf+++data ProjectEventAction+  -- | Decodes from "created"+  = ProjectCreatedAction+  -- | Decodes from "edited"+  | ProjectEditedAction+  -- | Decodes from "closed"+  | ProjectClosedAction+  -- | Decodes from "reopened"+  | ProjectReopenedAction+  -- | Decodes from "deleted"+  | ProjectDeletedAction+  -- | The result of decoding an unknown project event action type+  | ProjectActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData ProjectEventAction where rnf = genericRnf++instance FromJSON ProjectEventAction where+  parseJSON = withText "Project event action" $ \t ->+    case t of+        "created"       -> pure ProjectCreatedAction+        "edited"        -> pure ProjectEditedAction+        "closed"        -> pure ProjectClosedAction+        "reopened"      -> pure ProjectReopenedAction+        "deleted"       -> pure ProjectDeletedAction+        _               -> pure (ProjectActionOther t)++-- | Triggered when a project is created, updated, closed, reopened, or deleted.+-- See <https://developer.github.com/v3/activity/events/types/#projectevent>.+data ProjectEvent = ProjectEvent+    { evProjectEventAction      :: !ProjectEventAction+    , evProjectPayload          :: !HookProject+    , evProjectRepo             :: !HookRepository+    , evProjectOrganization     :: !HookOrganization+    , evProjectSender           :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender ProjectEvent where senderOfEvent = evProjectSender+instance EventHasRepo ProjectEvent where repoForEvent = evProjectRepo+instance NFData ProjectEvent where rnf = genericRnf+++-- | Triggered when a private repository is open sourced. Without a doubt: the best GitHub event.+-- See <https://developer.github.com/v3/activity/events/types/#publicevent>.+data PublicEvent = PublicEvent+    { evPublicEventRepo         :: !HookRepository+    , evPublicEventSender       :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender PublicEvent where senderOfEvent = evPublicEventSender+instance EventHasRepo PublicEvent where repoForEvent = evPublicEventRepo+instance NFData PublicEvent where rnf = genericRnf+++data PullRequestEventAction+  -- | Decodes from "assigned"+  = PullRequestAssignedAction+  -- | Decodes from "unassigned"+  | PullRequestUnassignedAction+  -- | Decodes from "review_requsted"+  | PullRequestReviewRequestedAction+  -- | Decodes from "review_request_removed"+  | PullRequestReviewRequestRemovedAction+  -- | Decodes from "labeled"+  | PullRequestLabeledAction+  -- | Decodes from "unlabeled"+  | PullRequestUnlabeledAction+  -- | Decodes from "opened"+  | PullRequestOpenedAction+  -- | Decodes from "edited"+  | PullRequestEditedAction+  -- | Decodes from "closed"+  | PullRequestClosedAction+  -- | Decodes from "reopened"+  | PullRequestReopenedAction+  -- | The result of decoding an unknown pull request event action type+  | PullRequestActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData PullRequestEventAction where rnf = genericRnf++instance FromJSON PullRequestEventAction where+  parseJSON = withText "Pull request event action" $ \t ->+    case t of+        "assigned"      -> pure PullRequestAssignedAction+        "unassigned"    -> pure PullRequestUnassignedAction+        "review_requsted" -> pure PullRequestReviewRequestedAction+        "review_request_removed" -> pure PullRequestReviewRequestRemovedAction+        "labeled"       -> pure PullRequestLabeledAction+        "unlabeled"     -> pure PullRequestUnlabeledAction+        "opened"        -> pure PullRequestOpenedAction+        "edited"        -> pure PullRequestEditedAction+        "closed"        -> pure PullRequestClosedAction+        "reopened"      -> pure PullRequestReopenedAction+        _               -> pure (PullRequestActionOther t)++-- | Triggered when a pull request is assigned, unassigned, labeled, unlabeled, opened, edited,+-- closed, reopened, or synchronized. Also triggered when a pull request review is requested,+-- or when a review request is removed.+-- See <https://developer.github.com/v3/activity/events/types/#pullrequestevent>.+data PullRequestEvent = PullRequestEvent+    { evPullReqAction           :: !PullRequestEventAction+    , evPullReqNumber           :: !Int+    , evPullReqPayload          :: !HookPullRequest+    , evPullReqRepo             :: !HookRepository+    , evPullReqSender           :: !HookUser+    , evPullReqInstallationId   :: !Int+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender PullRequestEvent where senderOfEvent = evPullReqSender+instance EventHasRepo PullRequestEvent where repoForEvent = evPullReqRepo+instance NFData PullRequestEvent where rnf = genericRnf+++data PullRequestReviewEventAction+  -- | Decodes from "submitted"+  = PullRequestReviewSubmittedAction+  -- | Decodes from "edited"+  | PullRequestReviewEditedAction+  -- | Decodes from "dismissed"+  | PullRequestReviewDismissedAction+  -- | The result of decoding an unknown pull request review event action type+  | PullRequestReviewActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData PullRequestReviewEventAction where rnf = genericRnf++instance FromJSON PullRequestReviewEventAction where+  parseJSON = withText "Pull request review event action" $ \t ->+    case t of+        "submitted"     -> pure PullRequestReviewSubmittedAction+        "edited"        -> pure PullRequestReviewEditedAction+        "dismissed"     -> pure PullRequestReviewDismissedAction+        _               -> pure (PullRequestReviewActionOther t)++-- | Triggered when a pull request review is submitted into a non-pending state,+-- the body is edited, or the review is dismissed.+-- See <https://developer.github.com/v3/activity/events/types/#pullrequestreviewevent>.+data PullRequestReviewEvent = PullRequestReviewEvent+    { evPullReqReviewAction     :: !PullRequestReviewEventAction+    , evPullReqReviewPayload    :: !HookPullRequestReview+    , evPullReqReviewTarget     :: !HookPullRequest+    , evPullReqReviewRepo       :: !HookRepository+    , evPullReqReviewSender     :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender PullRequestReviewEvent where senderOfEvent = evPullReqReviewSender+instance EventHasRepo PullRequestReviewEvent where repoForEvent = evPullReqReviewRepo+instance NFData PullRequestReviewEvent where rnf = genericRnf+++data PullRequestReviewCommentEventAction+  -- | Decodes from "created"+  = PullRequestReviewCommentCreatedAction+  -- | Decodes from "edited"+  | PullRequestReviewCommentEditedAction+  -- | Decodes from "deleted"+  | PullRequestReviewCommentDeletedAction+  -- | The result of decoding an unknown pull request review comment event action type+  | PullRequestReviewCommentActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData PullRequestReviewCommentEventAction where rnf = genericRnf++instance FromJSON PullRequestReviewCommentEventAction where+  parseJSON = withText "Pull request review comment event action" $ \t ->+    case t of+        "created"       -> pure PullRequestReviewCommentCreatedAction+        "edited"        -> pure PullRequestReviewCommentEditedAction+        "deleted"       -> pure PullRequestReviewCommentDeletedAction+        _               -> pure (PullRequestReviewCommentActionOther t)++-- | Triggered when a comment on a pull request's unified diff is created,+-- edited, or deleted (in the Files Changed tab).+-- See <https://developer.github.com/v3/activity/events/types/#pullrequestreviewcommentevent>.+data PullRequestReviewCommentEvent = PullRequestReviewCommentEvent+    { evPullReqRevComAction     :: !PullRequestReviewCommentEventAction+    , evPullReqRevComment       :: !HookPullRequestReviewComment+    , evPullReqRevTarget        :: !HookPullRequest+    , evPullReqRevRepo          :: !HookRepository+    , evPullReqRevSender        :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender PullRequestReviewCommentEvent where senderOfEvent = evPullReqRevSender+instance EventHasRepo PullRequestReviewCommentEvent where repoForEvent = evPullReqRevRepo+instance NFData PullRequestReviewCommentEvent where rnf = genericRnf+++-- | Triggered on a push to a repository branch. Branch pushes and repository tag+-- pushes also trigger webhook push events.+-- See <https://developer.github.com/v3/activity/events/types/#pushevent>.+data PushEvent = PushEvent+    { evPushRef                 :: !Text+    , evPushHeadSha             :: !(Maybe Text)+    , evPushBeforeSha           :: !(Maybe Text)+    , evPushCreated             :: !Bool+    , evPushDeleted             :: !Bool+    , evPushForced              :: !Bool+    , evPushBaseRef             :: !(Maybe Text)+    , evPushCompareUrl          :: !URL+    , evPushCommits             :: !(Maybe (Vector HookCommit))+    , evPushHeadCommit          :: !(Maybe HookCommit)+    , evPushRepository          :: !HookRepository+    , evPushOrganization        :: !(Maybe HookOrganization)+    , evPushSender              :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender PushEvent where senderOfEvent = evPushSender+instance EventHasRepo PushEvent where repoForEvent = evPushRepository+instance NFData PushEvent where rnf = genericRnf+++data ReleaseEventAction+  -- | Decodes from "published"+  = ReleasePublishedAction+  -- | The result of decoding an unknown release event action type+  | ReleaseActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData ReleaseEventAction where rnf = genericRnf++instance FromJSON ReleaseEventAction where+  parseJSON = withText "Release event action" $ \t ->+    case t of+        "published"     -> pure ReleasePublishedAction+        _               -> pure (ReleaseActionOther t)++-- | Triggered when a release is published.+-- See <https://developer.github.com/v3/activity/events/types/#releaseevent>.+data ReleaseEvent = ReleaseEvent+    { evReleaseEventAction      :: !ReleaseEventAction      -- ^ Currently only releasePublished.+    , evReleaseEventPayload     :: !HookRelease+    , evReleaseEventRepo        :: !HookRepository+    , evReleaseEventSender      :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender ReleaseEvent where senderOfEvent = evReleaseEventSender+instance EventHasRepo ReleaseEvent where repoForEvent = evReleaseEventRepo+instance NFData ReleaseEvent where rnf = genericRnf+++data RepositoryEventAction+  -- | Decodes from "created"+  = RepositoryCreatedAction+  -- | Decodes from "deleted"+  | RepositoryDeletedAction+  -- | Decodes from "archived"+  | RepositoryArchivedAction+  -- | Decodes from "unarchived"+  | RepositoryUnarchivedAction+  -- | Decodes from "publicized"+  | RepositoryPublicizedAction+  -- | Decodes from "privatized"+  | RepositoryPrivatizedAction+  -- | The result of decoding an unknown repository event action type+  | RepositoryActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData RepositoryEventAction where rnf = genericRnf++instance FromJSON RepositoryEventAction where+  parseJSON = withText "Repository event action" $ \t ->+    case t of+        "created"       -> pure RepositoryCreatedAction+        "deleted"       -> pure RepositoryDeletedAction+        "archived"      -> pure RepositoryArchivedAction+        "unarchived"    -> pure RepositoryUnarchivedAction+        "publicized"    -> pure RepositoryPublicizedAction+        "privatized"    -> pure RepositoryPrivatizedAction+        _               -> pure (RepositoryActionOther t)++-- | Triggered when a repository is created, archived, unarchived, made public, or made private.+-- Organization hooks are also triggered when a repository is deleted.+-- Events of this type are not visible in timelines. These events are only used to trigger hooks.+-- See <https://developer.github.com/v3/activity/events/types/#repositoryevent>.+data RepositoryEvent = RepositoryEvent+    { evRepositoryAction        :: !RepositoryEventAction+    , evRepositoryTarget        :: !HookRepository+    , evRepositoryOrg           :: !(Maybe HookOrganization)+    , evRepositorySender        :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender RepositoryEvent where senderOfEvent = evRepositorySender+instance EventHasRepo RepositoryEvent where repoForEvent = evRepositoryTarget+instance NFData RepositoryEvent where rnf = genericRnf+++data StatusEventState+  -- | Decodes from "pending"+  = StatusPendingState+  -- | Decodes from "success"+  | StatusSuccessState+  -- | Decodes from "failure"+  | StatusFailureState+  -- | Decodes from "error"+  | StatusErrorState+  -- | The result of decoding an unknown status event state+  | StatusStateOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData StatusEventState where rnf = genericRnf++instance FromJSON StatusEventState where+  parseJSON = withText "Status event state" $ \t ->+    case t of+        "pending"       -> pure StatusPendingState+        "success"       -> pure StatusSuccessState+        "failure"       -> pure StatusFailureState+        "error"         -> pure StatusErrorState+        _               -> pure (StatusStateOther t)++-- | Triggered when the status of a Git commit changes.+-- Events of this type are not visible in timelines. These events are only used to trigger hooks.+-- See <https://developer.github.com/v3/activity/events/types/#statusevent>.+data StatusEvent = StatusEvent+    { evStatusId                :: !Int+    , evStatusCommitSha         :: !Text+    , evStatusCommitName        :: !Text+    , evStatusTargetUrl         :: !(Maybe URL)+    , evStatusContext           :: !Text+    , evStatusDescription       :: !(Maybe Text)+    , evStatusState             :: !StatusEventState+    , evStatusCommit            :: !HookCommit+    -- FIXME: Branches are missing here+    , evStatusCreatedAt         :: !UTCTime+    , evStatusUpdatedAt         :: !UTCTime+    , evStatusRepo              :: !HookRepository+    , evStatusSender            :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender StatusEvent where senderOfEvent = evStatusSender+instance EventHasRepo StatusEvent where repoForEvent = evStatusRepo+instance NFData StatusEvent where rnf = genericRnf+++data TeamEventAction+  -- | Decodes from "created"+  = TeamCreatedAction+  -- | Decodes from "deleted"+  | TeamDeletedAction+  -- | Decodes from "edited"+  | TeamEditedAction+  -- | Decodes from "added_to_repository"+  | TeamAddedToRepoAction+  -- | Decodes from "removed_from_repository"+  | TeamRemovedFromRepoAction+  -- | The result of decoding an unknown team event action type+  | TeamActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData TeamEventAction where rnf = genericRnf++instance FromJSON TeamEventAction where+  parseJSON = withText "Team event action" $ \t ->+    case t of+        "created"       -> pure TeamCreatedAction+        "deleted"       -> pure TeamDeletedAction+        "edited"        -> pure TeamEditedAction+        "added_to_repository"     -> pure TeamAddedToRepoAction+        "removed_from_repository" -> pure TeamRemovedFromRepoAction+        _               -> pure (TeamActionOther t)++-- | Triggered when an organization's team is created or deleted.+-- Events of this type are not visible in timelines. These events are only used to trigger organization hooks.+-- See <https://developer.github.com/v3/activity/events/types/#teamevent>.+data TeamEvent = TeamEvent+    { evTeamAction              :: !TeamEventAction+    , evTeamTarget              :: !HookTeam+    , evTeamOrganization        :: !HookOrganization+    , evTeamSender              :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender TeamEvent where senderOfEvent = evTeamSender+instance NFData TeamEvent where rnf = genericRnf+++-- | Triggered when a repository is added to a team.+-- Events of this type are not visible in timelines. These events are only used to trigger hooks.+-- See <https://developer.github.com/v3/activity/events/types/#teamaddevent>.+data TeamAddEvent = TeamAddEvent+    { evTeamAddTarget           :: !(Maybe HookTeam) -- ^ Older events may not include this in the payload.+    , evTeamAddRepo             :: !HookRepository+    , evTeamAddOrg              :: !HookOrganization+    , evTeamAddSender           :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender TeamAddEvent where senderOfEvent = evTeamAddSender+instance EventHasRepo TeamAddEvent where repoForEvent = evTeamAddRepo+instance NFData TeamAddEvent where rnf = genericRnf+++data WatchEventAction+  -- | Decodes from "started"+  = WatchStartedAction+  -- | The result of decoding an unknown watch event action type+  | WatchActionOther !Text+  deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData WatchEventAction where rnf = genericRnf++instance FromJSON WatchEventAction where+  parseJSON = withText "Watch event action" $ \t ->+    case t of+        "started"       -> pure WatchStartedAction+        _               -> pure (WatchActionOther t)++-- | The WatchEvent is related to starring a repository, not watching.+-- The event’s actor is the user who starred a repository, and the event’s+-- repository is the repository that was starred.+-- See <https://developer.github.com/v3/activity/events/types/#watchevent>.+data WatchEvent = WatchEvent+    { evWatchAction             :: !WatchEventAction+    , evWatchRepo               :: !HookRepository+    , evWatchSender             :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance EventHasSender WatchEvent where senderOfEvent = evWatchSender+instance EventHasRepo WatchEvent where repoForEvent = evWatchRepo+instance NFData WatchEvent where rnf = genericRnf+++-- Aeson Instances++instance FromJSON CommitCommentEvent where+    parseJSON = withObject "CommitCommentEvent" $ \o -> CommitCommentEvent+        <$> o .: "action"+        <*> o .: "comment"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON CreateEvent where+    parseJSON = withObject "CreateEvent" $ \o -> CreateEvent+        <$> o .: "ref"+        <*> o .: "ref_type"+        <*> o .: "master_branch"+        <*> o .: "description"+        <*> o .: "pusher_type"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON DeleteEvent where+    parseJSON = withObject "DeleteEvent" $ \o -> DeleteEvent+        <$> o .: "ref"+        <*> o .: "ref_type"+        <*> o .: "pusher_type"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON DeploymentEvent where+    parseJSON = withObject "DeploymentEvent" $ \o -> DeploymentEvent+        <$> o .: "deployment"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON DeploymentStatusEvent where+    parseJSON = withObject "DeploymentStatusEvent" $ \o -> DeploymentStatusEvent+        <$> o .: "deployment_status"+        <*> o .: "deployment"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON ForkEvent where+    parseJSON = withObject "ForkEvent" $ \o -> ForkEvent+        <$> o .: "forkee"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON GollumEvent where+    parseJSON = withObject "GollumEvent" $ \o -> GollumEvent+        <$> o .: "pages"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON InstallationEvent where+    parseJSON = withObject "InstallationEvent" $ \o -> InstallationEvent+        <$> o .: "action"+        <*> o .: "installation"+        <*> o .: "sender"++instance FromJSON InstallationRepositoriesEvent where+    parseJSON = withObject "InstallationRepositoriesEvent" $ \o -> InstallationRepositoriesEvent+        <$> o .: "action"+        <*> o .: "installation"+        <*> o .: "repository_selection"+        <*> o .: "repositories_added"+        <*> o .: "repositories_removed"+        <*> o .: "sender"++instance FromJSON IssueCommentEvent where+    parseJSON = withObject "IssueCommentEvent" $ \o -> IssueCommentEvent+        <$> o .: "action"+        <*> o .: "issue"+        <*> o .: "comment"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON IssuesEvent where+    parseJSON = withObject "IssuesEvent" $ \o -> IssuesEvent+        <$> o .: "action"+        <*> o .: "issue"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON LabelEvent where+    parseJSON = withObject "LabelEvent" $ \o -> LabelEvent+        <$> o .: "action"+        <*> o .: "label"+        <*> o .: "repository"+        <*> o .:? "organization"+        <*> o .: "sender"++instance FromJSON MemberEvent where+    parseJSON = withObject "MemberEvent" $ \o -> MemberEvent+        <$> o .: "action"+        <*> o .: "member"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON MembershipEvent where+    parseJSON = withObject "MembershipEvent" $ \o -> MembershipEvent+        <$> o .: "action"+        <*> o .: "scope"+        <*> o .: "member"+        <*> o .: "team"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON MilestoneEvent where+    parseJSON = withObject "MilestoneEvent" $ \o -> MilestoneEvent+        <$> o .: "action"+        <*> o .: "milestone"+        <*> o .: "repository"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON OrganizationEvent where+    parseJSON = withObject "OrganizationEvent" $ \o -> OrganizationEvent+        <$> o .: "action"+        <*> o .: "invitation"+        <*> o .: "membership"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON OrgBlockEvent where+    parseJSON = withObject "OrgBlockEvent" $ \o -> OrgBlockEvent+        <$> o .: "action"+        <*> o .: "blocked_user"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON PageBuildEvent where+    parseJSON = withObject "PageBuildEvent" $ \o -> PageBuildEvent+        <$> o .: "id"+        <*> o .: "build"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON ProjectCardEvent where+    parseJSON = withObject "ProjectCardEvent" $ \o -> ProjectCardEvent+        <$> o .: "action"+        <*> o .: "project_card"+        <*> o .: "repository"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON ProjectColumnEvent where+    parseJSON = withObject "ProjectColumnEvent" $ \o -> ProjectColumnEvent+        <$> o .: "action"+        <*> o .: "project_column"+        <*> o .: "repository"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON ProjectEvent where+    parseJSON = withObject "ProjectEvent" $ \o -> ProjectEvent+        <$> o .: "action"+        <*> o .: "project"+        <*> o .: "repository"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON PublicEvent where+    parseJSON = withObject "PublicEvent" $ \o -> PublicEvent+        <$> o .: "repository"+        <*> o .: "sender"++instance FromJSON PullRequestEvent where+    parseJSON = withObject "PullRequestEvent" $ \o -> PullRequestEvent+        <$> o .: "action"+        <*> o .: "number"+        <*> o .: "pull_request"+        <*> o .: "repository"+        <*> o .: "sender"+        <*> (o .: "installation" >>= \i -> i .: "id")++instance FromJSON PullRequestReviewEvent where+    parseJSON = withObject "PullRequestReviewEvent" $ \o -> PullRequestReviewEvent+        <$> o .: "action"+        <*> o .: "review"+        <*> o .: "pull_request"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON PullRequestReviewCommentEvent where+    parseJSON = withObject "PullRequestReviewCommentEvent" $ \o -> PullRequestReviewCommentEvent+        <$> o .: "action"+        <*> o .: "comment"+        <*> o .: "pull_request"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON PushEvent where+    parseJSON = withObject "PushEvent" $ \o -> PushEvent+        <$> o .: "ref"+        <*> o .:? "after"+        <*> o .:? "before"+        <*> o .: "created"+        <*> o .: "deleted"+        <*> o .: "forced"+        <*> o .:? "base_ref"+        <*> o .: "compare"+        <*> o .:? "commits"+        <*> o .:? "head_commit"+        <*> o .: "repository"+        <*> o .:? "organization"+        <*> o .: "sender"++instance FromJSON ReleaseEvent where+    parseJSON = withObject "ReleaseEvent" $ \o -> ReleaseEvent+        <$> o .: "action"+        <*> o .: "release"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON RepositoryEvent where+    parseJSON = withObject "RepositoryEvent" $ \o -> RepositoryEvent+        <$> o .: "action"+        <*> o .: "repository"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON StatusEvent where+    parseJSON = withObject "StatusEvent" $ \o -> StatusEvent+        <$> o .: "id"+        <*> o .: "sha"+        <*> o .: "name"+        <*> o .:? "target_url"+        <*> o .: "context"+        <*> o .:? "description"+        <*> o .: "state"+        <*> o .: "commit"+        <*> o .: "created_at"+        <*> o .: "updated_at"+        <*> o .: "repository"+        <*> o .: "sender"++instance FromJSON TeamEvent where+    parseJSON = withObject "TeamEvent" $ \o -> TeamEvent+        <$> o .: "action"+        <*> o .: "team"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON TeamAddEvent where+    parseJSON = withObject "TeamAddEvent" $ \o -> TeamAddEvent+        <$> o .:? "team"+        <*> o .: "repository"+        <*> o .: "organization"+        <*> o .: "sender"++instance FromJSON WatchEvent where+    parseJSON = withObject "WatchEvent" $ \o -> WatchEvent+        <$> o .: "action"+        <*> o .: "repository"+        <*> o .: "sender"
+ src/GitHub/Data/Webhooks/Payload.hs view
@@ -0,0 +1,1027 @@+--+module GitHub.Data.Webhooks.Payload+    ( -- * Construction Types+      URL(..)+    , getUrl+    , OwnerType(..)+      -- * Webhook Types+    , HookIssue(..)+    , HookRepository(..)+    , HookRepositorySimple(..)+    , HookRepositoryLabel(..)+    , HookUser(..)+    , HookSimpleUser(..)+    , HookOrganization(..)+    , HookOrganizationInvitation(..)+    , HookOrganizationMembership(..)+    , HookTeam(..)+    , HookMilestone(..)+    , HookMembership(..)+    , HookProject(..)+    , HookProjectCard(..)+    , HookProjectColumn(..)+    , HookIssueLabels(..)+    , HookCommit(..)+    , HookRelease(..)+    , HookPullRequest(..)+    , HookPullRequestReview(..)+    , HookInstallation(..)+    , HookDeployment(..)+    , HookDeploymentStatus(..)+    , HookWikiPage(..)+    , HookPageBuildResult(..)+    , HookIssueComment(..)+    , HookCommitComment(..)+    , HookPullRequestReviewComment(..)+    ) where++import           Data.Aeson               (FromJSON(..), withObject, withText, (.!=), (.:), (.:?))+import           Control.DeepSeq          (NFData (..))+import           Control.DeepSeq.Generics (genericRnf)+import           Control.Applicative      ((<|>))+import           Data.Data                (Data, Typeable)+import           Data.Time                (UTCTime)+import           Data.Time.Clock.POSIX    (posixSecondsToUTCTime)+import           Data.Text                (Text)+import qualified Data.Text                as T+import           Data.Vector              (Vector)+import           GHC.Generics             (Generic)+++-- Types lifted from the @github@ package.++data OwnerType = OwnerUser | OwnerOrganization+    deriving (Eq, Ord, Enum, Bounded, Show, Read, Generic, Typeable, Data)++instance NFData OwnerType++instance FromJSON OwnerType where+  parseJSON = withText "Owner type" $ \t ->+      case T.toLower t of+          "user"          -> pure OwnerUser+          "organization"  -> pure OwnerOrganization+          _               -> fail $ "Unknown owner type: " ++ T.unpack t+++newtype URL = URL Text+    deriving (Eq, Ord, Show, Generic, Typeable, Data)++instance NFData URL where rnf = genericRnf++instance FromJSON URL where+  parseJSON = withText "URL" (pure . URL)++getUrl :: URL -> Text+getUrl (URL url) = url+++-- Hooks++type IssueState = Text++data HookIssue = HookIssue+    { whIssueUrl                :: !URL+    , whIssueLabelsUrl          :: !URL+    , whIssueCommentsUrl        :: !URL+    , whIssueEventsUrl          :: !URL+    , whIssueHtmlUrl            :: !URL+    , whIssueId                 :: !Int+    , whIssueNumber             :: !Int+    , whIssueTitle              :: !Text+    , whIssueUser               :: !HookUser+    , whIssueLabels             :: !(Vector HookIssueLabels)+    , whIssueState              :: IssueState+    , whIssueIsLocked           :: !Bool+    , whIssueAssignee           :: !(Maybe HookUser)+    , whIssueMilestone          :: !(Maybe HookMilestone)+    , whIssueCommentCount       :: !Int+    , whIssueCreatedAt          :: !UTCTime+    , whIssueUpdatedAt          :: !UTCTime+    , whIssueClosedAt           :: !(Maybe UTCTime)+    , whIssueBody               :: !Text+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookIssue where rnf = genericRnf+++data HookRepository = HookRepository+    { whRepoId                  :: !Int+    , whRepoName                :: !Text+    , whRepoFullName            :: !Text+    , whRepoOwner               :: !(Either HookSimpleUser HookUser)+    , whRepoIsPrivate           :: !Bool+    , whRepoHtmlUrl             :: !URL+    , whRepoDescription         :: !Text+    , whRepoIsAFork             :: !Bool+    , whRepoUrl                 :: !URL+    , whRepoForksUrl            :: !URL+    , whRepoKeysUrl             :: !URL+    , whRepoCollaboratorsUrl    :: !URL+    , whRepoTeamsUrl            :: !URL+    , whRepoHooksUrl            :: !URL+    , whRepoIssueEventsUrl      :: !URL+    , whRepoEventsUrl           :: !URL+    , whRepoAssigneesUrl        :: !URL+    , whRepoBranchesUrl         :: !URL+    , whRepoTagsUrl             :: !URL+    , whRepoBlobsUrl            :: !URL+    , whRepoGitTagsUrl          :: !URL+    , whRepoGitRefsUrl          :: !URL+    , whRepoTreesUrl            :: !URL+    , whRepoStatusesUrl         :: !URL+    , whRepoLanguagesUrl        :: !URL+    , whRepoStargazersUrl       :: !URL+    , whRepoContributorsUrl     :: !URL+    , whRepoSubscribersUrl      :: !URL+    , whRepoSubscriptionUrl     :: !URL+    , whRepoCommitsUrl          :: !URL+    , whRepoGitCommitsUrl       :: !URL+    , whRepoCommentsUrl         :: !URL+    , whRepoIssueCommentsUrl    :: !URL+    , whRepoContentsUrl         :: !URL+    , whRepoCompareUrl          :: !URL+    , whRepoMergesUrl           :: !URL+    , whRepoArchiveUrl          :: !URL+    , whRepoDownloadsUrl        :: !URL+    , whRepoIssuesUrl           :: !URL+    , whRepoPullsUrl            :: !URL+    , whRepoMilestonesUrl       :: !URL+    , whRepoNotificationsUrl    :: !URL+    , whRepoLabelsUrl           :: !URL+    , whRepoReleasesUrl         :: !URL+    , whRepoCreatedAt           :: !UTCTime+    , whRepoUpdatedAt           :: !UTCTime+    , whRepoPushedAt            :: !UTCTime+    , whRepoGitUrl              :: !URL+    , whRepoSshUrl              :: !URL+    , whRepoCloneUrl            :: !URL+    , whRepoSvnUrl              :: !URL+    , whRepoHomepage            :: !(Maybe URL)+    , whRepoSize                :: !Int+    , whRepoStargazersCount     :: !Int+    , whRepoWatchersCount       :: !Int+    , whRepoLanguage            :: !(Maybe Text)+    , whRepoHasIssues           :: !Bool+    , whRepoHasDownloads        :: !Bool+    , whRepoHasWiki             :: !Bool+    , whRepoHasPages            :: !Bool+    , whRepoForkCount           :: !Int+    , whRepoMirrorUrl           :: !(Maybe URL)+    , whRepoOpenIssuesCount     :: !Int+    , whRepoDefaultBranchName   :: !Text+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookRepository where rnf = genericRnf+++data HookRepositorySimple = HookRepositorySimple+  { whSimplRepoId               :: !Int+  , whSimplRepoName             :: !Text+  , whSimplRepoFullName         :: !Text+  }+  deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookRepositorySimple where rnf = genericRnf++++data HookRepositoryLabel = HookRepositoryLabel+    { whRepoLabelUrl            :: !URL+    , whRepoLabelName           :: !Text+    , whRepoLabelColor          :: !Text+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookRepositoryLabel where rnf = genericRnf+++data HookUser = HookUser+    { whUserLogin               :: !Text+    , whUserId                  :: !Int+    , whUserAvatarUrl           :: !URL+    , whUserGravatarId          :: !URL+    , whUserUrl                 :: !URL+    , whUserHtmlUrl             :: !URL+    , whUserFollowersUrl        :: !URL+    , whUserFollowingUrl        :: !URL+    , whUserGistsUrl            :: !URL+    , whUserStarredUrl          :: !URL+    , whUserSubscriptionsUrl    :: !URL+    , whUserOrganizationsUrl    :: !URL+    , whUserReposUrl            :: !URL+    , whUserEventsUrl           :: !URL+    , whUserReceivedEventsUrl   :: !URL+    , whUserType                :: !OwnerType+    , whUserIsAdminOfSite       :: !Bool+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookUser where rnf = genericRnf+++data HookSimpleUser = HookSimpleUser+    { whSimplUserName           :: !Text+    , whSimplUserEmail          :: !Text+    , whSimplUserLogin          :: !(Maybe Text)+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookSimpleUser where rnf = genericRnf+++data HookOrganization = HookOrganization+    { whOrgLogin                :: !Text+    , whOrgId                   :: !Int+    , whOrgUrl                  :: !URL+    , whOrgReposUrl             :: !URL+    , whOrgEventsUrl            :: !URL+    , whOrgHooksUrl             :: !(Maybe URL)+    , whOrgIssuesUrl            :: !(Maybe URL)+    , whOrgMembersUrl           :: !URL+    , whOrgPublicMembersUrl     :: !URL+    , whOrgAvatarUrl            :: !URL+    , whOrgDescription          :: !Text+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookOrganization where rnf = genericRnf+++data HookOrganizationInvitation = HookOrganizationInvitation+    { whOrgInvitationId         :: !Int+    , whOrgInvitationLogin      :: !Text+    , whOrgInvitationEmail      :: !(Maybe Text)+    , whOrgInvitationRole       :: !Text+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookOrganizationInvitation where rnf = genericRnf+++data HookOrganizationMembership = HookOrganizationMembership+    { whOrgMembershipUrl        :: !URL+    , whOrgMembershipState      :: !Text+    , whOrgMembershipRole       :: !Text+    , whOrgMembershipOrgUrl     :: !URL+    , whOrgMembershipUser       :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookOrganizationMembership where rnf = genericRnf+++data HookTeam = HookTeam+    { whTeamName                :: !Text+    , whTeamId                  :: !Int+    , whTeamSlug                :: !Text+    , whTeamPermission          :: !Text+    , whTeamUrl                 :: !URL+    , whTeamMembersUrl          :: !URL+    , whTeamRepositoriesUrl     :: !URL+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookTeam where rnf = genericRnf+++type MilestoneState = Text++data HookMilestone = HookMilestone+    { whMilestoneUrl            :: !URL+    , whMilestoneHtmlUrl        :: !URL+    , whMilestoneLabelsUrl      :: !URL+    , whMilestoneId             :: !Int+    , whMilestoneNumber         :: !Int+    , whMilestoneTitle          :: !Text+    , whMilestoneDescription    :: !(Maybe Text)+    , whMilestoneCreator        :: !HookUser+    , whMilestoneOpenIssues     :: !Int+    , whMilestoneClosedIssues   :: !Int+    , whMilestoneState          :: !MilestoneState+    , whMilestoneCreatedAt      :: !UTCTime+    , whMilestoneUpdatedAt      :: !UTCTime+    , whMilestoneDueOn          :: !(Maybe UTCTime)+    , whMilestoneClosedAt       :: !(Maybe UTCTime)+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookMilestone where rnf = genericRnf+++type MembershipState = Text+type MembershipRole = Text++data HookMembership = HookMembership+    { whMembershipUrl           :: !URL+    , whMembershipState         :: !MembershipState+    , whMembershipRole          :: !MembershipRole+    , whMembershipOrgUrl        :: !URL+    , whMembershipUser          :: !HookUser+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookMembership where rnf = genericRnf+++type ProjectState = Text++data HookProject = HookProject+    { whProjectOwnerUrl         :: !URL+    , whProjectUrl              :: !URL+    , whProjectColumnsUrl       :: !URL+    , whProjectId               :: !Int+    , whProjectName             :: !Text+    , whProjectBody             :: !Text+    , whProjectNumber           :: !Int+    , whProjectState            :: !ProjectState+    , whProjectCreator          :: !HookUser+    , whProjectCreatedAt        :: !UTCTime+    , whProjectUpdatedAt        :: !UTCTime+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookProject where rnf = genericRnf+++data HookProjectCard = HookProjectCard+    { whProjectCardUrl          :: !URL+    , whProjectCardColumnUrl    :: !URL+    , whProjectCardColumnId     :: !Int+    , whProjectCardId           :: !Int+    , whProjectCardNote         :: !(Maybe Text)+    , whProjectCardCreator      :: !HookUser+    , whProjectCardCreatedAt    :: !UTCTime+    , whProjectCardUpdatedAt    :: !UTCTime+    , whProjectCardContentUrl   :: !URL+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookProjectCard where rnf = genericRnf+++data HookProjectColumn = HookProjectColumn+    { whProjectColumnUrl        :: !URL+    , whProjectColumnProjUrl    :: !URL+    , whProjectColumnCardsUrl   :: !URL+    , whProjectColumnId         :: !Int+    , whProjectColumnName       :: !Text+    , whProjectColumnCreatedAt  :: !UTCTime+    , whProjectColumnUpdatedAt  :: !UTCTime+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookProjectColumn where rnf = genericRnf+++data HookIssueLabels = HookIssueLabels+    { whIssueLabelId            :: !(Maybe Int)   -- ^ Not always sent.+    , whIssueLabelUrl           :: !URL+    , whIssueLabelName          :: !Text+    , whIssueLabelColor         :: !Text+    , whIssueLabelIsDefault     :: !Bool          -- ^ Defaults to false when not present.+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookIssueLabels where rnf = genericRnf+++-- FIXME: Missing nested metadata that provides commit description+-- FIXME: Missing property "parent" (no examples provided)+data HookCommit = HookCommit+    { whCommitSha               :: !Text          -- ^ Sometimes called the commit 'id'.+    , whCommitUrl               :: !URL+    , whCommitHtmlUrl           :: !(Maybe URL)   -- ^ Not always sent.+    , whCommitCommentsUrl       :: !(Maybe URL)   -- ^ Not always sent.+    , whCommitAuthor            :: !(Either HookSimpleUser HookUser)+    , whCommitCommitter         :: !(Either HookSimpleUser HookUser)+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookCommit where rnf = genericRnf+++-- FIXME: Missing property "assets" (no examples provided)+data HookRelease = HookRelease+    { whReleaseUrl              :: !URL+    , whReleaseAssetsUrl        :: !URL+    , whReleaseUploadUrl        :: !URL+    , whReleaseHtmlUrl          :: !URL+    , whReleaseId               :: !Int+    , whReleaseTagName          :: !Text+    , whReleaseTargetCommitish  :: !Text+    , whReleaseName             :: !(Maybe Text)+    , whReleaseIsDraft          :: !Bool+    , whReleaseAuthor           :: !HookUser+    , whReleaseIsPreRelease     :: !Bool+    , whReleaseCreatedAt        :: !UTCTime+    , whReleasePublishedAt      :: !(Maybe UTCTime)+    , whReleaseTarballUrl       :: !URL+    , whReleaseZipballUrl       :: !URL+    , whReleaseBody             :: !(Maybe Text)+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookRelease where rnf = genericRnf+++-- FIXME: Property "head" missing (not sure)+-- FIXME: Property "base" missing (not sure)+data HookPullRequest = HookPullRequest+    { whPullReqUrl              :: !URL+    , whPullReqId               :: !Int+    , whPullReqHtmlUrl          :: !URL+    , whPullReqDiffUrl          :: !URL+    , whPullReqPatchUrl         :: !URL+    , whPullReqIssueUrl         :: !URL+    , whPullReqNumber           :: !Int+    , whPullReqState            :: !Text -- FIXME: Smart constructor?+    , whPullReqIsLocked         :: !Bool+    , whPullReqTitle            :: !Text+    , whPullReqUser             :: !HookUser+    , whPullReqBody             :: !Text+    , whPullReqCreatedAt        :: !UTCTime+    , whPullReqUpdatedAt        :: !UTCTime+    , whPullReqClosedAt         :: !(Maybe UTCTime)+    , whPullReqMergedAt         :: !(Maybe UTCTime)+    , whPullReqMergeCommitSha   :: !(Maybe Text)+    , whPullReqAssignee         :: !(Maybe HookUser)+    , whPullReqMilestone        :: !(Maybe HookMilestone)+    , whPullReqCommitsUrl       :: !URL+    , whPullReqRevCommentsUrl   :: !URL+    , whPullReqRevCommentUrl    :: !URL+    , whPullReqCommentsUrl      :: !URL+    , whPullReqStatusesUrl      :: !URL+    -- , whPullReqIsMerged         :: !Bool+    -- , whPullReqIsMergeable      :: !Bool+    -- , whPullReqMergeableState   :: !Text+    -- , whPullReqMergedBy         :: !(Maybe HookUser)+    , whPullReqCommentCount     :: !(Maybe Int)               -- ^ Not sent with all events.+    , whPullReqRevCommentCount  :: !(Maybe Int)               -- ^ Not sent with all events.+    , whPullReqCommitCount      :: !(Maybe Int)               -- ^ Not sent with all events.+    , whPullReqAdditionsCount   :: !(Maybe Int)               -- ^ Not sent with all events.+    , whPullReqDeletionsCount   :: !(Maybe Int)               -- ^ Not sent with all events.+    , whPullReqFileChangeCount  :: !(Maybe Int)               -- ^ Not sent with all events.+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookPullRequest where rnf = genericRnf+++data HookPullRequestReview = HookPullRequestReview+    { whPullReqReviewId         :: !Int+    , whPullReqReviewUser       :: !HookUser+    , whPullReqReviewBody       :: !Text+    , whPullReqReviewSubmittedAt :: !UTCTime+    , whPullReqReviewState      :: !Text+    , whPullReqReviewHtmlUrl    :: !URL+    , whPullReqReviewPullUrl    :: !URL+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookPullRequestReview where rnf = genericRnf+++data HookInstallation = HookInstallation+    { whInstallationId          :: !Int+    , whInstallationAccount     :: !HookUser+    , whInstallationRepoSel     :: !Text+    , whInstallationTokenUrl    :: !URL+    , whInstallationRepoUrl     :: !URL+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookInstallation where rnf = genericRnf+++data HookDeployment = HookDeployment+    { whDeploymentUrl           :: !URL+    , whDeploymentId            :: !Int+    , whDeploymentSha           :: !Text+    , whDeploymentRef           :: !Text+    , whDeploymentTask          :: !Text+    -- , whDeploymentPayload+    , whDeploymentEnv           :: !Text+    , whDeploymentDescription   :: !(Maybe Text)+    , whDeploymentCreator       :: !HookUser+    , whDeploymentCreatedAt     :: !UTCTime+    , whDeploymentUpdatedAt     :: !UTCTime+    , whDeploymentStatusesUrl   :: !URL+    , whDeploymentRepoUrl       :: !URL+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookDeployment where rnf = genericRnf+++data HookDeploymentStatus = HookDeploymentStatus+    { whDeploymentStatusUrl     :: !URL+    , whDeploymentStatusId      :: !Int+    , whDeploymentStatusState   :: !Text+    , whDeploymentStatusCreator :: !HookUser+    , whDeploymentStatusDesc    :: !(Maybe Text)+    , whDeploymentStatusTargetUrl :: !(Maybe URL)+    , whDeploymentStatusCreatedAt :: !UTCTime+    , whDeploymentStatusUpdatedAt :: !UTCTime+    , whDeploymentStatusDeplUrl   :: !URL+    , whDeploymentStatusRepoUrl   :: !URL+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookDeploymentStatus where rnf = genericRnf+++data HookWikiPage = HookWikiPage+    { whWikiPageName            :: !Text+    , whWikiPageTitle           :: !Text+    , whWikiPageSummary         :: !(Maybe Text)+    , wkWikiPageAction          :: !Text+    , whWikiPageSha             :: !Text+    , whWikiPageHtmlUrl         :: URL+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookWikiPage where rnf = genericRnf+++data HookPageBuildResult = HookPageBuildResult+    { whPageBuildUrl            :: !URL+    , whPageBuildStatus         :: !Text+    , whPageBuildError          :: !(Maybe Text)+    , whPageBuildPusher         :: !HookUser+    , whPageBuildCommitSha      :: !Text+    , whPageBuildDuration       :: !Int+    , whPageBuildCreatedAt      :: !UTCTime+    , whPageBuildUpdatedAt      :: !UTCTime+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookPageBuildResult where rnf = genericRnf+++data HookIssueComment = HookIssueComment+    { whIssueCommentUrl         :: !URL+    , whIssueCommentHtmlUrl     :: !URL+    , whIssueCommentIssueUrl    :: !URL+    , whIssueCommentId          :: !Int+    , whIssueCommentUser        :: !HookUser+    , whIssueCommentCreatedAt   :: !UTCTime+    , whIssueCommentUpdatedAt   :: !UTCTime+    , whIssueCommentBody        :: !Text+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookIssueComment where rnf = genericRnf+++data HookCommitComment = HookCommitComment+    { whCommitCommentUrl        :: !URL+    , whCommitCommentHtmlUrl    :: !URL+    , whCommitCommentId         :: !Int+    , whCommitCommentUser       :: !HookUser+    , whCommitCommentPos        :: !(Maybe Int)+    , whCommitCommentLine       :: !(Maybe Int)+    , whCommitCommentPath       :: !(Maybe Text)+    , whCommitCommentCommitSha  :: !Text+    , whCommitCommentCreatedAt  :: !UTCTime+    , whCommitCommentUpdatedAt  :: !UTCTime+    , whCommitCommentBody       :: !Text+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookCommitComment where rnf = genericRnf+++data HookPullRequestReviewComment = HookPullRequestReviewComment+    { whPullReqRevComUrl        :: !URL+    , whPullReqRevComId         :: !Int+    , whPullReqRevComDiffHunk   :: !Text+    , whPullReqRevComPath       :: !Text+    , whPullReqRevComPos        :: !Int+    , whPullReqRevComOrigPos    :: !Int+    , whPullReqRevComCommitSha  :: !Text+    , whPullReqRevComOrigSha    :: !Text+    , whPullReqRevComUser       :: !HookUser+    , whPullReqRevComBody       :: !Text+    , whPullReqRevComCreatedAt  :: !UTCTime+    , whPullReqRevComUpdatedAt  :: !UTCTime+    , whPullReqRevComHtmlUrl    :: !URL+    , whPullReqRevComPullReqUrl :: !URL+    }+    deriving (Eq, Show, Typeable, Data, Generic)++instance NFData HookPullRequestReviewComment where rnf = genericRnf+++-- Aeson Instances++instance FromJSON HookIssue where+  parseJSON = withObject "HookIssue" $ \o -> HookIssue+      <$> o .: "url"+      <*> o .: "labels_url"+      <*> o .: "comments_url"+      <*> o .: "events_url"+      <*> o .: "html_url"+      <*> o .: "id"+      <*> o .: "number"+      <*> o .: "title"+      <*> o .: "user"+      <*> o .: "labels"+      <*> o .: "state"+      <*> o .: "locked"+      <*> o .: "assignee"+      <*> o .: "milestone"+      <*> o .: "comments"+      <*> o .: "created_at"+      <*> o .: "updated_at"+      <*> o .:? "closed_at"+      <*> o .: "body"++instance FromJSON HookRepository where+  parseJSON = withObject "HookRepository" $ \o -> HookRepository+      <$> o .: "id"+      <*> o .: "name"+      <*> o .: "full_name"+      <*> ((Right <$> o .: "owner") <|> (Left <$> o .: "owner")) -- try complex form first+      <*> o .: "private"+      <*> o .: "html_url"+      <*> o .:? "description" .!= T.empty+      <*> o .: "fork"+      <*> o .: "url"+      <*> o .: "forks_url"+      <*> o .: "keys_url"+      <*> o .: "collaborators_url"+      <*> o .: "teams_url"+      <*> o .: "hooks_url"+      <*> o .: "issue_events_url"+      <*> o .: "events_url"+      <*> o .: "assignees_url"+      <*> o .: "branches_url"+      <*> o .: "tags_url"+      <*> o .: "blobs_url"+      <*> o .: "git_tags_url"+      <*> o .: "git_refs_url"+      <*> o .: "trees_url"+      <*> o .: "statuses_url"+      <*> o .: "languages_url"+      <*> o .: "stargazers_url"+      <*> o .: "contributors_url"+      <*> o .: "subscribers_url"+      <*> o .: "subscription_url"+      <*> o .: "commits_url"+      <*> o .: "git_commits_url"+      <*> o .: "comments_url"+      <*> o .: "issue_comment_url"+      <*> o .: "contents_url"+      <*> o .: "compare_url"+      <*> o .: "merges_url"+      <*> o .: "archive_url"+      <*> o .: "downloads_url"+      <*> o .: "issues_url"+      <*> o .: "pulls_url"+      <*> o .: "milestones_url"+      <*> o .: "notifications_url"+      <*> o .: "labels_url"+      <*> o .: "releases_url"+      -- FIXME: Wrap optional number/stringified UTCTime in a helper function? See PushEvent fixture+      <*> ((o .: "created_at")  <|> (posixSecondsToUTCTime <$> o .: "created_at"))+      <*> ((o .: "updated_at")  <|> (posixSecondsToUTCTime <$> o .: "updated_at"))+      <*> ((o .: "pushed_at")   <|> (posixSecondsToUTCTime <$> o .: "pushed_at"))+      <*> o .: "git_url"+      <*> o .: "ssh_url"+      <*> o .: "clone_url"+      <*> o .: "svn_url"+      <*> o .:? "homepage"+      <*> o .: "size"+      <*> o .: "stargazers_count"+      <*> o .: "watchers_count"+      <*> o .: "language"+      <*> o .: "has_issues"+      <*> o .: "has_downloads"+      <*> o .: "has_wiki"+      <*> o .: "has_pages"+      <*> o .: "forks_count"+      <*> o .:? "mirror_url"+      <*> o .: "open_issues_count"+      <*> o .: "default_branch"++instance FromJSON HookRepositorySimple where+  parseJSON = withObject "HookRepositorySimple" $ \o -> HookRepositorySimple+      <$> o .: "id"+      <*> o .: "name"+      <*> o .: "full_name"++instance FromJSON HookRepositoryLabel where+  parseJSON = withObject "HookRepositoryLabel" $ \o -> HookRepositoryLabel+      <$> o .: "url"+      <*> o .: "name"+      <*> o .: "color"++instance FromJSON HookUser where+  parseJSON = withObject "HookUser" $ \o -> HookUser+      <$> o .: "login"+      <*> o .: "id"+      <*> o .: "avatar_url"+      <*> o .: "gravatar_id"+      <*> o .: "url"+      <*> o .: "html_url"+      <*> o .: "followers_url"+      <*> o .: "following_url"+      <*> o .: "gists_url"+      <*> o .: "starred_url"+      <*> o .: "subscriptions_url"+      <*> o .: "organizations_url"+      <*> o .: "repos_url"+      <*> o .: "events_url"+      <*> o .: "received_events_url"+      <*> o .: "type"+      <*> o .: "site_admin"++instance FromJSON HookSimpleUser where+  parseJSON = withObject "HookSimpleUser" $ \o -> HookSimpleUser+      <$> o .: "name"+      <*> o .: "email"+      <*> o .:? "username"++instance FromJSON HookOrganization where+  parseJSON = withObject "HookOrganization" $ \o -> HookOrganization+      <$> o .: "login"+      <*> o .: "id"+      <*> o .: "url"+      <*> o .: "repos_url"+      <*> o .: "events_url"+      <*> o .:? "hooks_url"+      <*> o .:? "issues_url"+      <*> o .: "members_url"+      <*> o .: "public_members_url"+      <*> o .: "avatar_url"+      <*> o .:? "description" .!= T.empty++instance FromJSON HookOrganizationInvitation where+  parseJSON = withObject "HookOrganizationInvitation" $ \o -> HookOrganizationInvitation+      <$> o .: "id"+      <*> o .: "login"+      <*> o .: "email"+      <*> o .: "role"++instance FromJSON HookOrganizationMembership where+  parseJSON = withObject "HookOrganizationMembership" $ \o -> HookOrganizationMembership+      <$> o .: "url"+      <*> o .: "state"+      <*> o .: "role"+      <*> o .: "organization_url"+      <*> o .: "user"++instance FromJSON HookTeam where+  parseJSON = withObject "HookTeam" $ \o -> HookTeam+      <$> o .: "name"+      <*> o .: "id"+      <*> o .: "slug"+      <*> o .: "permission"+      <*> o .: "url"+      <*> o .: "members_url"+      <*> o .: "repositories_url"++instance FromJSON HookMilestone where+  parseJSON = withObject "HookMilestone" $ \o -> HookMilestone+      <$> o .: "url"+      <*> o .: "html_url"+      <*> o .: "labels_url"+      <*> o .: "id"+      <*> o .: "number"+      <*> o .: "title"+      <*> o .: "description"+      <*> o .: "creator"+      <*> o .: "open_issues"+      <*> o .: "closed_issues"+      <*> o .: "state"+      <*> o .: "created_at"+      <*> o .: "updated_at"+      <*> o .: "due_on"+      <*> o .: "closed_at"++instance FromJSON HookMembership where+  parseJSON = withObject "HookMembership" $ \o -> HookMembership+      <$> o .: "url"+      <*> o .: "state"+      <*> o .: "role"+      <*> o .: "organization_url"+      <*> o .: "user"++instance FromJSON HookProject where+  parseJSON = withObject "HookProject" $ \o -> HookProject+      <$> o .: "owner_url"+      <*> o .: "url"+      <*> o .: "columns_url"+      <*> o .: "id"+      <*> o .: "name"+      <*> o .: "body"+      <*> o .: "number"+      <*> o .: "state"+      <*> o .: "creator"+      <*> o .: "created_at"+      <*> o .: "updated_at"++instance FromJSON HookProjectCard where+  parseJSON = withObject "HookProjectCard" $ \o -> HookProjectCard+      <$> o .: "url"+      <*> o .: "column_url"+      <*> o .: "column_id"+      <*> o .: "id"+      <*> o .:? "note"+      <*> o .: "creator"+      <*> o .: "created_at"+      <*> o .: "updated_at"+      <*> o .: "content_url"++instance FromJSON HookProjectColumn where+  parseJSON = withObject "HookProjectColumn" $ \o -> HookProjectColumn+      <$> o .: "url"+      <*> o .: "project_url"+      <*> o .: "cards_url"+      <*> o .: "id"+      <*> o .: "name"+      <*> o .: "created_at"+      <*> o .: "updated_at"++instance FromJSON HookIssueLabels where+  parseJSON = withObject "HookIssueLabels" $ \o -> HookIssueLabels+      <$> o .:? "id"+      <*> o .: "url"+      <*> o .: "name"+      <*> o .: "color"+      <*> o .:? "default" .!= False++instance FromJSON HookCommit where+  parseJSON = withObject "HookCommit" $ \o -> HookCommit+      <$> (o .: "sha" <|> o .: "id")+      <*> o .: "url"+      <*> o .:? "html_url"+      <*> o .:? "comments_url"+      <*> ((Right <$> o .: "author")      <|> (Left <$> o .: "author"))       -- try complex form first+      <*> ((Right <$> o .: "committer")   <|> (Left <$> o .: "committer"))    -- try complex form first++instance FromJSON HookRelease where+  parseJSON = withObject "HookRelease" $ \o -> HookRelease+      <$> o .: "url"+      <*> o .: "assets_url"+      <*> o .: "upload_url"+      <*> o .: "html_url"+      <*> o .: "id"+      <*> o .: "tag_name"+      <*> o .: "target_commitish"+      <*> o .:? "name"+      <*> o .: "draft"+      <*> o .: "author"+      <*> o .: "prerelease"+      <*> o .: "created_at"+      <*> o .:? "published_at"+      <*> o .: "tarball_url"+      <*> o .: "zipball_url"+      <*> o .:? "body"++instance FromJSON HookPullRequest where+  parseJSON = withObject "HookPullRequest" $ \o -> HookPullRequest+      <$> o .: "url"+      <*> o .: "id"+      <*> o .: "html_url"+      <*> o .: "diff_url"+      <*> o .: "patch_url"+      <*> o .: "issue_url"+      <*> o .: "number"+      <*> o .: "state"+      <*> o .: "locked"+      <*> o .: "title"+      <*> o .: "user"+      <*> o .: "body"+      <*> o .: "created_at"+      <*> o .: "updated_at"+      <*> o .:? "closed_at"+      <*> o .:? "merged_at"+      <*> o .:? "merge_commit_sha"+      <*> o .:? "assignee"+      <*> o .:? "milestone"+      <*> o .: "commits_url"+      <*> o .: "review_comments_url"+      <*> o .: "review_comment_url"+      <*> o .: "comments_url"+      <*> o .: "statuses_url"+      -- <*> o .: "merged"+      -- <*> o .: "mergeable"+      -- <*> o .: "mergeable_state"+      -- <*> o .: "merged_by"+      <*> o .:? "comments"+      <*> o .:? "review_comments"+      <*> o .:? "commits"+      <*> o .:? "additions"+      <*> o .:? "deletions"+      <*> o .:? "changed_files"++instance FromJSON HookPullRequestReview where+  parseJSON = withObject "HookPullRequestReview" $ \o -> HookPullRequestReview+      <$> o .: "id"+      <*> o .: "user"+      <*> o .: "body"+      <*> o .: "submitted_at"+      <*> o .: "state"+      <*> o .: "html_url"+      <*> o .: "pull_request_url"++instance FromJSON HookInstallation where+  parseJSON = withObject "HookInstallation" $ \o -> HookInstallation+      <$> o .: "id"+      <*> o .: "account"+      <*> o .: "repository_selection"+      <*> o .: "access_tokens_url"+      <*> o .: "repositories_url"++instance FromJSON HookDeployment where+  parseJSON = withObject "HookDeployment" $ \o -> HookDeployment+      <$> o .: "url"+      <*> o .: "id"+      <*> o .: "sha"+      <*> o .: "ref"+      <*> o .: "task"+      <*> o .: "environment"+      <*> o .:? "description"+      <*> o .: "creator"+      <*> o .: "created_at"+      <*> o .: "updated_at"+      <*> o .: "statuses_url"+      <*> o .: "repository_url"++instance FromJSON HookDeploymentStatus where+  parseJSON = withObject "HookDeploymentStatus" $ \o -> HookDeploymentStatus+      <$> o .: "url"+      <*> o .: "id"+      <*> o .: "state"+      <*> o .: "creator"+      <*> o .:? "description"+      <*> o .:? "target_url"+      <*> o .: "created_at"+      <*> o .: "updated_at"+      <*> o .: "deployment_url"+      <*> o .: "repository_url"++instance FromJSON HookWikiPage where+  parseJSON = withObject "HookWikiPage" $ \o -> HookWikiPage+      <$> o .: "page_name"+      <*> o .: "title"+      <*> o .:? "summary"+      <*> o .: "action"+      <*> o .: "sha"+      <*> o .: "html_url"++instance FromJSON HookPageBuildResult where+  parseJSON = withObject "HookPageBuildResult" $ \o -> HookPageBuildResult+      <$> o .: "url"+      <*> o .: "status"+      <*> (o .: "error" >>= \e -> e .:? "message")+      <*> o .: "pusher"+      <*> o .: "commit"+      <*> o .: "duration"+      <*> o .: "created_at"+      <*> o .: "updated_at"++instance FromJSON HookIssueComment where+  parseJSON = withObject "HookIssueComment" $ \o -> HookIssueComment+      <$> o .: "url"+      <*> o .: "html_url"+      <*> o .: "issue_url"+      <*> o .: "id"+      <*> o .: "user"+      <*> o .: "created_at"+      <*> o .: "updated_at"+      <*> o .: "body"++instance FromJSON HookCommitComment where+  parseJSON = withObject "HookCommitComment" $ \o -> HookCommitComment+      <$> o .: "url"+      <*> o .: "html_url"+      <*> o .: "id"+      <*> o .: "user"+      <*> o .:? "position"+      <*> o .:? "line"+      <*> o .:? "path"+      <*> o .: "commit_id"+      <*> o .: "created_at"+      <*> o .: "updated_at"+      <*> o .: "body"++instance FromJSON HookPullRequestReviewComment where+  parseJSON = withObject "HookPullRequestReviewComment" $ \o -> HookPullRequestReviewComment+      <$> o .: "url"+      <*> o .: "id"+      <*> o .: "diff_hunk"+      <*> o .: "path"+      <*> o .: "position"+      <*> o .: "original_position"+      <*> o .: "commit_id"+      <*> o .: "original_commit_id"+      <*> o .: "user"+      <*> o .: "body"+      <*> o .: "created_at"+      <*> o .: "updated_at"+      <*> o .: "html_url"+      <*> o .: "pull_request_url"
+ src/GitHub/Data/Webhooks/Secure.hs view
@@ -0,0 +1,52 @@+-- See <https://developer.github.com/webhooks/securing/>.+module GitHub.Data.Webhooks.Secure+    ( isSecurePayload+    , assertSecurePayload+    ) where++import           Crypto.Hash.Algorithms   (SHA1)+import           Crypto.MAC.HMAC          (HMAC(..), hmac)+import           Control.Monad            (unless)+import           Control.Exception        (Exception, throwIO)+import           Data.ByteArray           (convert, constEq)+import           Data.Monoid              ((<>))+import           Data.ByteString          (ByteString)+import           Data.Text                (Text)+import qualified Data.ByteString.Base16   as B16+import qualified Data.Text.Encoding       as E+++-- The implementation of this module is partially lifted from the @github@ package.+++-- | Returns 'True' if the given HMAC digest (passed in the @X-Hub-Signature@ header)+-- agrees with the provided secret and request body. If not, this request may be forged.+isSecurePayload+    :: Text+    -> Maybe Text+    -> ByteString+    -> Bool+isSecurePayload secret shaOpt payload = maybe False (constEq ourSig) theirSig+    where+      hexDigest = B16.encode . convert . hmacGetDigest+      theirSig = E.encodeUtf8 <$> shaOpt+      ourSig = "sha1=" <> hexDigest (hmac (E.encodeUtf8 secret) payload :: HMAC SHA1)+++-- | An exception indicating that the given payload is not secure.+data PayloadNotSecure = PayloadNotSecure++instance Exception PayloadNotSecure++instance Show PayloadNotSecure where+    showsPrec _ PayloadNotSecure = showString "the origin of this request may not originate from GitHub"++-- | Like 'isSecurePayload', but throws 'PayloadNotSecure' if the payload is not secure.+assertSecurePayload+    :: Text+    -> Maybe Text+    -> ByteString+    -> IO ()+assertSecurePayload secret shaOpt payload = do+    let secure = isSecurePayload secret shaOpt payload+    unless secure $! throwIO PayloadNotSecure
+ stack.yaml view
@@ -0,0 +1,74 @@+# This file was automatically generated by 'stack init'+#+# Some commonly used options have been documented as comments in this file.+# For advanced use and comprehensive documentation of the format, please see:+# https://docs.haskellstack.org/en/stable/yaml_configuration/++# Resolver to choose a 'specific' stackage snapshot or a compiler version.+# A snapshot resolver dictates the compiler version and the set of packages+# to be used for project dependencies. For example:+#+# resolver: lts-3.5+# resolver: nightly-2015-09-21+# resolver: ghc-7.10.2+# resolver: ghcjs-0.1.0_ghc-7.10.2+# resolver:+#  name: custom-snapshot+#  location: "./custom-snapshot.yaml"+resolver: lts-10.0++# User packages to be built.+# Various formats can be used as shown in the example below.+#+# packages:+# - some-directory+# - https://example.com/foo/bar/baz-0.0.2.tar.gz+# - location:+#    git: https://github.com/commercialhaskell/stack.git+#    commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a+# - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a+#   extra-dep: true+#  subdirs:+#  - auto-update+#  - wai+#+# A package marked 'extra-dep: true' will only be built if demanded by a+# non-dependency (i.e. a user package), and its test suites and benchmarks+# will not be run. This is useful for tweaking upstream packages.+packages:+- .+- location: ./examples/servant-simple+  extra-dep: true+- location: ./examples/servant+  extra-dep: true+- location: ./examples/scotty+  extra-dep: true++# Dependency packages to be pulled from upstream that are not in the resolver+# (e.g., acme-missiles-0.3)+extra-deps:+- servant-github-webhook-0.3.2.1 # for github-webhooks-servant-example++# Override default flag values for local packages and extra-deps+flags: {}++# Extra package databases containing global packages+extra-package-dbs: []++# Control whether we use the GHC we find on the path+# system-ghc: true+#+# Require a specific version of stack, using version ranges+# require-stack-version: -any # Default+# require-stack-version: ">=1.5"+#+# Override the architecture used by stack, especially useful on Windows+# arch: i386+# arch: x86_64+#+# Extra directories used by stack for building+# extra-include-dirs: [/path/to/dir]+# extra-lib-dirs: [/path/to/dir]+#+# Allow a newer minor version of GHC than the snapshot specifies+# compiler-check: newer-minor