{"action":"created","comment":{"url":"https://api.github.com/repos/ryantrinkle/reflex/pulls/comments/37105708","id":37105708,"diff_hunk":"@@ -0,0 +1,168 @@\n+# Reflex Quick(ish) Reference\n+\n+## Typeclasses\n+\n+Many Reflex functions operate in monadic context `m a`, where the monad 'm' supports various additional typeclasses such as MonadWidget, MonadHold, or MonadSample in addition to Monad itself.  The actual 'm' in use will be determined by the top-level entry point of the FRP host (such as Reflex-Dom -- see the bottom of the Reflex-Dom quick reference for details).\n+\n+The function signatures here have been simplified by removing many typeclass constraints and adding simple annotations to each function.  Also the ubiquitous 't' type parameter has been removed.\n+\n+Functions annotated with \"[ ]\" are *pure*:  They operate on Events, Behaviors, or Dynamics uniformly without regard to the \"current time\".\n+\n+Other functions must operate in some monadic context, because they produce a result \"as of now\".  The annotations are:\n+\n+```haskell\n+[ ]   -- Pure function\n+[S]   -- Function runs in any monad supporting MonadSample\n+[H]   -- Function runs in any monad supporting MonadHold\n+```\n+\n+Since MonadHold depends on MonadSample, any [S] function also runs in [H] context.\n+\n+## Functions producing Event\n+\n+```haskell\n+-- Trivial Event\n+[ ]   never   ::              Event a\n+\n+-- Extract Event from Dynamic\n+[ ]   updated :: Dynamic a -> Event a\n+\n+-- Transform Event to Event using function\n+[ ]   fmap      :: (a ->       b) ->        Event a -> Event b\n+[ ]   fmapMaybe :: (a -> Maybe b) ->        Event a -> Event b\n+[ ]   ffilter   :: (a ->    Bool) ->        Event a -> Event a\n+[ ]   ffor      ::        Event a -> (a ->       b) -> Event b\n+[ ]   fforMaybe ::        Event a -> (a -> Maybe b) -> Event b\n+\n+-- Event to identical Event with debug trace.\n+[ ]   traceEvent     :: Show a => String -> Event a -> Event a\n+[ ]   traceEventWith ::    (a -> String) -> Event a -> Event a\n+\n+-- Transform Event to Event by sampling Behavior or Dynamic\n+[ ]   gate               ::                     Behavior Bool -> Event a -> Event a\n+[ ]   tag                ::                        Behavior a -> Event b -> Event a\n+[ ]   tagDyn             ::                         Dynamic a -> Event b -> Event a\n+[ ]   attach             ::                        Behavior a -> Event b -> Event (a, b)\n+[ ]   attachDyn          ::                         Dynamic a -> Event b -> Event (a, b)\n+[ ]   attachWith         :: (a -> b ->       c) -> Behavior a -> Event b -> Event c\n+[ ]   attachDynWith      :: (a -> b ->       c) ->  Dynamic a -> Event b -> Event c\n+[ ]   attachWithMaybe    :: (a -> b -> Maybe c) -> Behavior a -> Event b -> Event c\n+[ ]   attachDynWithMaybe :: (a -> b -> Maybe c) ->  Dynamic a -> Event b -> Event c\n+\n+-- Combine multiple Events\n+[ ]   <> :: Monoid a => Event a -> Event a -> Event a\n+[ ]   mergeWith :: (a -> a -> a) -> [Event a] -> Event a\n+[ ]   leftmost :: [Event a] -> Event a\n+[ ]   mergeList :: [Event a] -> Event (NonEmpty a)\n+[ ]   merge :: GCompare k => DMap (WrapArg Event k) -> Event (DMap k)\n+[ ]   mergeMap :: Ord k => Map k (Event a) -> Event (Map k a)\n+\n+-- Efficient one-to-many fanout\n+[ ]   fanMap ::      Ord k => Event (Map k a) -> EventSelector (Const2 k a)\n+[ ]   fan    :: GCompare k => Event  (DMap k) -> EventSelector k\n+[ ]   select ::                                  EventSelector k -> k a -> Event a\n+\n+-- Event to Event via monadic function\n+[ ]   push       :: (a -> m (Maybe b)) -> Event a -> Event b\n+[ ]   pushAlways :: (a -> m        b ) -> Event a -> Event b\n+      -- Note supplied function operates in [H] context\n+\n+-- Event to monadic Event\n+[H]   headE     :: Event a -> m (Event a)\n+[H]   tailE     :: Event a -> m (Event a)\n+[H]   headTailE :: Event a -> m (Event a, Event a)\n+```\n+\n+## Functions producing Behavior\n+\n+```haskell\n+-- Trivial Behavior\n+[ ]   constant ::              a ->    Behavior a\n+\n+-- Extract Behavior from Dynamic\n+[ ]   current  ::      Dynamic a ->    Behavior a\n+\n+-- Event to monadic Behavior\n+[H]   hold     :: a ->   Event a -> m (Behavior a)\n+\n+-- Transform Behavior to Behavior using function\n+[ ]   fmap ::   (a -> b) -> Behavior a -> Behavior b\n+[ ]   ffor :: Behavior a ->   (a -> b) -> Behavior b\n+[ ]   <*> :: Behavior (a -> b) -> Behavior a -> Behavior b\n+[ ]   >>= :: Behavior a -> (a -> Behavior b) -> Behavior b\n+[ ]   <> :: Monoid a => Behavior a -> Behavior a -> Behavior a\n+-- ... plus many more due to typeclass membership\n+\n+-- Behavior to Behavior via monadic value\n+[S]   sample :: Behavior a -> m a\n+[ ]   pull   ::               m a -> Behavior a\n+      -- Note supplied value is in [S] context\n+```\n+\n+## Functions producing Dynamic\n+\n+```haskell\n+-- Trivial Dynamic\n+[ ]   constDyn ::                                  a            ->    Dynamic a\n+\n+-- Construct Dynamic from Event\n+[H]   holdDyn       ::                             a -> Event a -> m (Dynamic a)\n+[H]   foldDyn       :: (a -> b ->           b ) -> b -> Event a -> m (Dynamic b)\n+[H]   foldDynMaybe  :: (a -> b ->     Maybe b ) -> b -> Event a -> m (Dynamic b)\n+[H]   foldDynM      :: (a -> b -> m'        b ) -> b -> Event a -> m (Dynamic b)\n+[H]   foldDynMaybeM :: (a -> b -> m' (Maybe b)) -> b -> Event a -> m (Dynamic b)\n+      -- Note m' supplies [H] context\n+[H]   count :: Num b => Event a -> m (Dynamic b)\n+[H]   toggle :: Bool -> Event a -> m (Dynamic Bool)\n+\n+-- Transform Dynamic to Dynamic using function\n+[H]   forDyn  ::   Dynamic a ->  (a -> b) -> m (Dynamic b)\n+[H]   mapDyn  :: (a ->    b) -> Dynamic a -> m (Dynamic b)\n+[H]   mapDynM :: (a -> m' b) -> Dynamic a -> m (Dynamic b)\n+      -- Note m' supplies [S] context\n+[H]   splitDyn :: Dynamic (a, b) -> m (Dynamic a, Dynamic b)\n+\n+-- Combine multiple Dynamics\n+[H]   mconcatDyn :: Monoid a => [Dynamic a] -> m (Dynamic a)\n+[H]   distributeDMapOverDyn :: GCompare k => DMap (WrapArg Dynamic k) -> m (Dynamic (DMap k))\n+[H]   combineDyn :: (a -> b -> c) -> Dynamic a -> Dynamic b -> m (Dynamic c)\n+\n+-- Efficient one-to-many fanout\n+[ ]   demux      :: Ord k => Dynamic k -> Demux k\n+[H]   getDemuxed ::  Eq k =>              Demux k -> k -> m (Dynamic Bool)\n+\n+-- Dynamic to Dynamic, removing updates w/o value change\n+[ ]   nubDyn :: Eq a => Dynamic a -> Dynamic a\n+\n+-- Dynamic to identical Dynamic with debug trace.\n+[ ]   traceDyn     :: Show a => String -> Dynamic a -> Dynamic a\n+[ ]   traceDynWith ::    (a -> String) -> Dynamic a -> Dynamic a\n+```\n+\n+## Flattening functions\n+\n+These functions flatten nested types such as Event-of-Event, Behavior-of-Event, Event-of-Behavior etc, removing the outer wrapper.\n+\n+For Events, the returned Event fires whenever the latest Event supplied by the wrapper fires.  There are differences in how the functions handle *coincidences* -- situations where the old or new Event fires at the same instant that we switch from old to new.  In some cases, the output Event tracks the old Event at the instant of switchover, while in other cases it tracks the new Event.\n+\n+```haskell\n+-- Flatten Event-of-Event to monadic Event.  New Event is used immediately.","path":"Quickref.md","position":149,"original_position":149,"commit_id":"46ca8f6ffdd6db783aea5602e49bd1a8ac43cf48","original_commit_id":"46ca8f6ffdd6db783aea5602e49bd1a8ac43cf48","user":{"login":"ryantrinkle","id":1156448,"avatar_url":"https://avatars.githubusercontent.com/u/1156448?v=3","gravatar_id":"","url":"https://api.github.com/users/ryantrinkle","html_url":"https://github.com/ryantrinkle","followers_url":"https://api.github.com/users/ryantrinkle/followers","following_url":"https://api.github.com/users/ryantrinkle/following{/other_user}","gists_url":"https://api.github.com/users/ryantrinkle/gists{/gist_id}","starred_url":"https://api.github.com/users/ryantrinkle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ryantrinkle/subscriptions","organizations_url":"https://api.github.com/users/ryantrinkle/orgs","repos_url":"https://api.github.com/users/ryantrinkle/repos","events_url":"https://api.github.com/users/ryantrinkle/events{/privacy}","received_events_url":"https://api.github.com/users/ryantrinkle/received_events","type":"User","site_admin":false},"body":"I think we can drop the \"to monadic Event\" part - perhaps it's better to think about it as flattening starting at a particular point in time.","created_at":"2015-08-14T18:34:01Z","updated_at":"2015-08-14T18:34:01Z","html_url":"https://github.com/ryantrinkle/reflex/pull/23#discussion_r37105708","pull_request_url":"https://api.github.com/repos/ryantrinkle/reflex/pulls/23","_links":{"self":{"href":"https://api.github.com/repos/ryantrinkle/reflex/pulls/comments/37105708"},"html":{"href":"https://github.com/ryantrinkle/reflex/pull/23#discussion_r37105708"},"pull_request":{"href":"https://api.github.com/repos/ryantrinkle/reflex/pulls/23"}}},"pull_request":{"url":"https://api.github.com/repos/ryantrinkle/reflex/pulls/23","id":41361895,"html_url":"https://github.com/ryantrinkle/reflex/pull/23","diff_url":"https://github.com/ryantrinkle/reflex/pull/23.diff","patch_url":"https://github.com/ryantrinkle/reflex/pull/23.patch","issue_url":"https://api.github.com/repos/ryantrinkle/reflex/issues/23","number":23,"state":"open","locked":false,"title":"Add Quickref.md","user":{"login":"dbbnrl","id":1235226,"avatar_url":"https://avatars.githubusercontent.com/u/1235226?v=3","gravatar_id":"","url":"https://api.github.com/users/dbbnrl","html_url":"https://github.com/dbbnrl","followers_url":"https://api.github.com/users/dbbnrl/followers","following_url":"https://api.github.com/users/dbbnrl/following{/other_user}","gists_url":"https://api.github.com/users/dbbnrl/gists{/gist_id}","starred_url":"https://api.github.com/users/dbbnrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbbnrl/subscriptions","organizations_url":"https://api.github.com/users/dbbnrl/orgs","repos_url":"https://api.github.com/users/dbbnrl/repos","events_url":"https://api.github.com/users/dbbnrl/events{/privacy}","received_events_url":"https://api.github.com/users/dbbnrl/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-07-31T17:28:02Z","updated_at":"2015-08-14T18:34:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cc7e99bd27f87cf25a433f132fc6431c1a00a588","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ryantrinkle/reflex/pulls/23/commits","review_comments_url":"https://api.github.com/repos/ryantrinkle/reflex/pulls/23/comments","review_comment_url":"https://api.github.com/repos/ryantrinkle/reflex/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ryantrinkle/reflex/issues/23/comments","statuses_url":"https://api.github.com/repos/ryantrinkle/reflex/statuses/46ca8f6ffdd6db783aea5602e49bd1a8ac43cf48","head":{"label":"dbbnrl:develop","ref":"develop","sha":"46ca8f6ffdd6db783aea5602e49bd1a8ac43cf48","user":{"login":"dbbnrl","id":1235226,"avatar_url":"https://avatars.githubusercontent.com/u/1235226?v=3","gravatar_id":"","url":"https://api.github.com/users/dbbnrl","html_url":"https://github.com/dbbnrl","followers_url":"https://api.github.com/users/dbbnrl/followers","following_url":"https://api.github.com/users/dbbnrl/following{/other_user}","gists_url":"https://api.github.com/users/dbbnrl/gists{/gist_id}","starred_url":"https://api.github.com/users/dbbnrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbbnrl/subscriptions","organizations_url":"https://api.github.com/users/dbbnrl/orgs","repos_url":"https://api.github.com/users/dbbnrl/repos","events_url":"https://api.github.com/users/dbbnrl/events{/privacy}","received_events_url":"https://api.github.com/users/dbbnrl/received_events","type":"User","site_admin":false},"repo":{"id":39851478,"name":"reflex","full_name":"dbbnrl/reflex","owner":{"login":"dbbnrl","id":1235226,"avatar_url":"https://avatars.githubusercontent.com/u/1235226?v=3","gravatar_id":"","url":"https://api.github.com/users/dbbnrl","html_url":"https://github.com/dbbnrl","followers_url":"https://api.github.com/users/dbbnrl/followers","following_url":"https://api.github.com/users/dbbnrl/following{/other_user}","gists_url":"https://api.github.com/users/dbbnrl/gists{/gist_id}","starred_url":"https://api.github.com/users/dbbnrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbbnrl/subscriptions","organizations_url":"https://api.github.com/users/dbbnrl/orgs","repos_url":"https://api.github.com/users/dbbnrl/repos","events_url":"https://api.github.com/users/dbbnrl/events{/privacy}","received_events_url":"https://api.github.com/users/dbbnrl/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dbbnrl/reflex","description":"","fork":true,"url":"https://api.github.com/repos/dbbnrl/reflex","forks_url":"https://api.github.com/repos/dbbnrl/reflex/forks","keys_url":"https://api.github.com/repos/dbbnrl/reflex/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dbbnrl/reflex/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dbbnrl/reflex/teams","hooks_url":"https://api.github.com/repos/dbbnrl/reflex/hooks","issue_events_url":"https://api.github.com/repos/dbbnrl/reflex/issues/events{/number}","events_url":"https://api.github.com/repos/dbbnrl/reflex/events","assignees_url":"https://api.github.com/repos/dbbnrl/reflex/assignees{/user}","branches_url":"https://api.github.com/repos/dbbnrl/reflex/branches{/branch}","tags_url":"https://api.github.com/repos/dbbnrl/reflex/tags","blobs_url":"https://api.github.com/repos/dbbnrl/reflex/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dbbnrl/reflex/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dbbnrl/reflex/git/refs{/sha}","trees_url":"https://api.github.com/repos/dbbnrl/reflex/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dbbnrl/reflex/statuses/{sha}","languages_url":"https://api.github.com/repos/dbbnrl/reflex/languages","stargazers_url":"https://api.github.com/repos/dbbnrl/reflex/stargazers","contributors_url":"https://api.github.com/repos/dbbnrl/reflex/contributors","subscribers_url":"https://api.github.com/repos/dbbnrl/reflex/subscribers","subscription_url":"https://api.github.com/repos/dbbnrl/reflex/subscription","commits_url":"https://api.github.com/repos/dbbnrl/reflex/commits{/sha}","git_commits_url":"https://api.github.com/repos/dbbnrl/reflex/git/commits{/sha}","comments_url":"https://api.github.com/repos/dbbnrl/reflex/comments{/number}","issue_comment_url":"https://api.github.com/repos/dbbnrl/reflex/issues/comments{/number}","contents_url":"https://api.github.com/repos/dbbnrl/reflex/contents/{+path}","compare_url":"https://api.github.com/repos/dbbnrl/reflex/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dbbnrl/reflex/merges","archive_url":"https://api.github.com/repos/dbbnrl/reflex/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dbbnrl/reflex/downloads","issues_url":"https://api.github.com/repos/dbbnrl/reflex/issues{/number}","pulls_url":"https://api.github.com/repos/dbbnrl/reflex/pulls{/number}","milestones_url":"https://api.github.com/repos/dbbnrl/reflex/milestones{/number}","notifications_url":"https://api.github.com/repos/dbbnrl/reflex/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dbbnrl/reflex/labels{/name}","releases_url":"https://api.github.com/repos/dbbnrl/reflex/releases{/id}","created_at":"2015-07-28T18:39:59Z","updated_at":"2015-07-28T18:42:20Z","pushed_at":"2015-07-31T21:16:50Z","git_url":"git://github.com/dbbnrl/reflex.git","ssh_url":"git@github.com:dbbnrl/reflex.git","clone_url":"https://github.com/dbbnrl/reflex.git","svn_url":"https://github.com/dbbnrl/reflex","homepage":"","size":307,"stargazers_count":0,"watchers_count":0,"language":"Haskell","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ryantrinkle:develop","ref":"develop","sha":"1a4b582860f2ba08d2b248ef89b2aab01cc72446","user":{"login":"ryantrinkle","id":1156448,"avatar_url":"https://avatars.githubusercontent.com/u/1156448?v=3","gravatar_id":"","url":"https://api.github.com/users/ryantrinkle","html_url":"https://github.com/ryantrinkle","followers_url":"https://api.github.com/users/ryantrinkle/followers","following_url":"https://api.github.com/users/ryantrinkle/following{/other_user}","gists_url":"https://api.github.com/users/ryantrinkle/gists{/gist_id}","starred_url":"https://api.github.com/users/ryantrinkle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ryantrinkle/subscriptions","organizations_url":"https://api.github.com/users/ryantrinkle/orgs","repos_url":"https://api.github.com/users/ryantrinkle/repos","events_url":"https://api.github.com/users/ryantrinkle/events{/privacy}","received_events_url":"https://api.github.com/users/ryantrinkle/received_events","type":"User","site_admin":false},"repo":{"id":26408057,"name":"reflex","full_name":"ryantrinkle/reflex","owner":{"login":"ryantrinkle","id":1156448,"avatar_url":"https://avatars.githubusercontent.com/u/1156448?v=3","gravatar_id":"","url":"https://api.github.com/users/ryantrinkle","html_url":"https://github.com/ryantrinkle","followers_url":"https://api.github.com/users/ryantrinkle/followers","following_url":"https://api.github.com/users/ryantrinkle/following{/other_user}","gists_url":"https://api.github.com/users/ryantrinkle/gists{/gist_id}","starred_url":"https://api.github.com/users/ryantrinkle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ryantrinkle/subscriptions","organizations_url":"https://api.github.com/users/ryantrinkle/orgs","repos_url":"https://api.github.com/users/ryantrinkle/repos","events_url":"https://api.github.com/users/ryantrinkle/events{/privacy}","received_events_url":"https://api.github.com/users/ryantrinkle/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ryantrinkle/reflex","description":"","fork":false,"url":"https://api.github.com/repos/ryantrinkle/reflex","forks_url":"https://api.github.com/repos/ryantrinkle/reflex/forks","keys_url":"https://api.github.com/repos/ryantrinkle/reflex/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ryantrinkle/reflex/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ryantrinkle/reflex/teams","hooks_url":"https://api.github.com/repos/ryantrinkle/reflex/hooks","issue_events_url":"https://api.github.com/repos/ryantrinkle/reflex/issues/events{/number}","events_url":"https://api.github.com/repos/ryantrinkle/reflex/events","assignees_url":"https://api.github.com/repos/ryantrinkle/reflex/assignees{/user}","branches_url":"https://api.github.com/repos/ryantrinkle/reflex/branches{/branch}","tags_url":"https://api.github.com/repos/ryantrinkle/reflex/tags","blobs_url":"https://api.github.com/repos/ryantrinkle/reflex/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ryantrinkle/reflex/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ryantrinkle/reflex/git/refs{/sha}","trees_url":"https://api.github.com/repos/ryantrinkle/reflex/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ryantrinkle/reflex/statuses/{sha}","languages_url":"https://api.github.com/repos/ryantrinkle/reflex/languages","stargazers_url":"https://api.github.com/repos/ryantrinkle/reflex/stargazers","contributors_url":"https://api.github.com/repos/ryantrinkle/reflex/contributors","subscribers_url":"https://api.github.com/repos/ryantrinkle/reflex/subscribers","subscription_url":"https://api.github.com/repos/ryantrinkle/reflex/subscription","commits_url":"https://api.github.com/repos/ryantrinkle/reflex/commits{/sha}","git_commits_url":"https://api.github.com/repos/ryantrinkle/reflex/git/commits{/sha}","comments_url":"https://api.github.com/repos/ryantrinkle/reflex/comments{/number}","issue_comment_url":"https://api.github.com/repos/ryantrinkle/reflex/issues/comments{/number}","contents_url":"https://api.github.com/repos/ryantrinkle/reflex/contents/{+path}","compare_url":"https://api.github.com/repos/ryantrinkle/reflex/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ryantrinkle/reflex/merges","archive_url":"https://api.github.com/repos/ryantrinkle/reflex/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ryantrinkle/reflex/downloads","issues_url":"https://api.github.com/repos/ryantrinkle/reflex/issues{/number}","pulls_url":"https://api.github.com/repos/ryantrinkle/reflex/pulls{/number}","milestones_url":"https://api.github.com/repos/ryantrinkle/reflex/milestones{/number}","notifications_url":"https://api.github.com/repos/ryantrinkle/reflex/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ryantrinkle/reflex/labels{/name}","releases_url":"https://api.github.com/repos/ryantrinkle/reflex/releases{/id}","created_at":"2014-11-09T20:27:01Z","updated_at":"2015-08-13T01:13:35Z","pushed_at":"2015-08-03T00:22:33Z","git_url":"git://github.com/ryantrinkle/reflex.git","ssh_url":"git@github.com:ryantrinkle/reflex.git","clone_url":"https://github.com/ryantrinkle/reflex.git","svn_url":"https://github.com/ryantrinkle/reflex","homepage":"","size":521,"stargazers_count":139,"watchers_count":139,"language":"Haskell","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":14,"mirror_url":null,"open_issues_count":4,"forks":14,"open_issues":4,"watchers":139,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ryantrinkle/reflex/pulls/23"},"html":{"href":"https://github.com/ryantrinkle/reflex/pull/23"},"issue":{"href":"https://api.github.com/repos/ryantrinkle/reflex/issues/23"},"comments":{"href":"https://api.github.com/repos/ryantrinkle/reflex/issues/23/comments"},"review_comments":{"href":"https://api.github.com/repos/ryantrinkle/reflex/pulls/23/comments"},"review_comment":{"href":"https://api.github.com/repos/ryantrinkle/reflex/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ryantrinkle/reflex/pulls/23/commits"},"statuses":{"href":"https://api.github.com/repos/ryantrinkle/reflex/statuses/46ca8f6ffdd6db783aea5602e49bd1a8ac43cf48"}}}}