úÎEŞ=Ar      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq )(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIX Safe-InferredrConvert s to tuConvert v constrained a to wx"Turns empty monoids into Nothing  listToMaybe generalized for monoidsruxruxrux(c) David Johnson, 2014djohnson.m@gmail.com experimentalPOSIXNoneyPerson ID for a z Objectz Person Object{JSON Instancesy|z}~€‚ƒ„…†‡{y|z}~€‚ƒ„…†‡y|z }~€‚ƒ„…†‡{(c) David Johnson, 2014djohnson.m@gmail.com experimentalPOSIXNone Error Types Core TypeHackerNews API request methodˆRequest Builder for APIˆˆˆ)(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIXNone68‰SEndpoint maps the id to the returned type on a type level The function dependency  id -> resp specifies that id uniquely determines respŠ Endpoint for Item‹$Generic function for making requests‰ŒTurn id" into path that points to resourceŠ‹‰ŒŠ‹‰ŒŠ‹((c) David Johnson, Konstantin Zudov 2014djohnson.m@gmail.com experimentalPOSIXNone6 for a   Object Comment ObjectJSON InstancesEndpoint instances    )(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIXNone6Poll Id for a #Poll Option Id for a Poll Opt Object# Poll ObjectPoll JSON InstancesPoll JSON Instances‘‰ Instance for ’‰ Instance for   !"#$%&'()*+,-./‘’ !"#$%&'()*+,-./  !"# $%&'()*+,-./‘’)(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIXNone60TopStories List“3 ID1 ID for a 33 Story Object”JSON instances 0•JSON Instances–Endpoint Instances for  TopStoriesID & 0—Endpoint Instances for StoryID & 30˜“™123456789:;<=>”•–—0˜“™123456789:;<=>0˜“™123 456789:;<=>”•–— )(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIXNone6?User ID for a A ObjectAA ObjectšJSON Instances›Endpoint instances?@ABCDEFGHIJš› ?@ABCDEFGHIJ?@A BCDEFGHIJš› )(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIXNone6œUpdate ID for an Updated ObjectK Update ObjectJSON InstancesEndpoint Instances œŸKLMNOPœŸKLMNOPœŸKLMNOP )(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIXNone6Q ID for a S typeSTypes JSON Instances¡Endpoint InstancesQRSTUVWXYZ[\]^ ¡QRSTUVWXYZ[\]^QRS TUVWXYZ[\]^ ¡ )(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIXNone6_ Max Item Int¢Max Item ID for a b`Item ID for a b objectb Item Type£JSON MaxItem Instance¤JSON Instances¥Endpoint Instances for ` & b¦Endpoint Instances for ¢ and __§¢¨`abcdefg£¤¥¦ _§¢¨`abcdefg_§¢¨`abgfedc£¤¥¦ )(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIXNonem‰ŒŠ‹  !"#$%&'()*+,-./0˜“™123456789:;<=>?@ABCDEFGHIJœŸKLMNOPQRSTUVWXYZ[\]^_§¢¨`abcdefg)(c) David Johnson, Konstantin Zudov, 2014djohnson.m@gmail.com experimentalPOSIXNone h Retrieve a b by `i Retrieve a 3 by 1j Retrieve a   by k Retrieve a # by l Retrieve a  by m Retrieve a A by ?nRetrieve a Jobo'Retrieve the Top Stories on Hacker NewspRetrieve the largest ItemIdqRetrieve the latest updates hijklmnopqr  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrhijklmnopqbgfedc`a #$%&'()*+,-./ !"3456789:;<=>12ABCDEFGHIJ?@STUVWXYZ[\]^QRKLMNOP_0 hijklmnopq©  !!""#$%&'()*+,,-./01234567899::;<=>?@ABCD E E F F G H I J K L M N O O P Q R S T T U U V W X Y Z [ \ ] ^ _ ` a a b c d e f ghijklmnopqrstuvwxyz{|}~€‚ƒ‚„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œ8™ Ÿ   ¡ ¢   £ ¤ ¥ ¦ § ¨ © ` ¥ªhackernews-0.3.1.0Web.HackerNewsWeb.HackerNews.UtilWeb.HackerNews.PersonWeb.HackerNews.ClientWeb.HackerNews.EndpointWeb.HackerNews.CommentWeb.HackerNews.PollWeb.HackerNews.StoryWeb.HackerNews.UserWeb.HackerNews.UpdateWeb.HackerNews.JobWeb.HackerNews.ItemWeb.HackerNews.TypesHackerNewsError RequestErrorNotFound ParseErrorConnectionError HackerNews hackerNews CommentIdComment commentBy commentId commentKids commentParent commentText commentTime commentTypecommentDeleted commentDeadPollId PollOptIdPollOpt pollOptBy pollOptId pollOptParent pollOptScore pollOptText pollOptTime pollOptTypepollOptDeleted pollOptDeadPollpollBypollIdpollKids pollParts pollScorepollTextpollTime pollTitlepollType pollDeletedpollDead TopStoriesStoryIdStorystoryBystoryId storyKids storyScore storyTime storyTitle storyTypestoryUrl storyDeleted storyDeadUserIdUser userAbout userCreated userDelayuserId userKarma userSubmitted userDeleteduserDeadUpdate updateItemsupdateProfiles updateDeleted updateDeadJobIdJobjobByjobIdjobScorejobTextjobTimejobTitlejobTypejobUrl jobDeletedjobDeadMaxItemItemIdItemItemJob ItemStory ItemPollOptItemPoll ItemCommentgetItemgetStory getCommentgetPoll getPollOptgetUsergetJob getTopStories getMaxItem getUpdates fromSeconds integer-gmpGHC.Integer.TypeInteger time-1.4.2Data.Time.Clock.UTCUTCTimetoTextbaseGHC.ShowShow text-1.2.0.0Data.Text.InternalText monoidToMaybePersonIdPerson$fFromJSONPersonpersonBypersonId personKids personScore personTime personTitle personType personUrl personDeleted personDeadbuildHNRequestEndpoint itemEndpoint getEndpointendpoint$fFromJSONComment$fEndpointCommentIdComment$fFromJSONPollOpt$fFromJSONPoll$fEndpointPollIdPoll$fEndpointPollOptIdPollOpt TopStoriesId$fFromJSONTopStories$fFromJSONStory $fEndpointTopStoriesIdTopStories$fEndpointStoryIdStory$fFromJSONUser$fEndpointUserIdUserUpdateId$fFromJSONUpdate$fEndpointUpdateIdUpdate $fFromJSONJob$fEndpointJobIdJob MaxItemId$fFromJSONMaxItem$fFromJSONItem$fEndpointItemIdItem$fEndpointMaxItemIdMaxItem